рдЕрдиреБрд░реЛрдз рдХрд╛ рдореИрд╕реЗрдЬ рдмрдирд╛рдирд╛

рдпреВрд░реЛрдкрд┐рдпрди рдЗрдХрдиреЙрдорд┐рдХ рдПрд░рд┐рдпрд╛ (рдИрдИрдП) рдХреЗ рдбреЗрд╡рд▓рдкрд░

рд░рд╛рд╕реНрддреЗ рдХреЛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рдЦрд╛рд╕ рдЬрд╛рдирдХрд╛рд░реА рдореЗрдВ рдмрддрд╛рдП рдЧрдП рддрд░реАрдХреЗ рдХреЗ рдореБрддрд╛рдмрд┐рдХ, рдмреБрдирд┐рдпрд╛рджреА рдЕрдиреБрд░реЛрдз рдореЗрдВ рдЬрд╝рд░реВрд░реА рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЗ рддреМрд░ рдкрд░ рдореЙрдбрд▓, рд╢рд┐рдкрдореЗрдВрдЯ, рдФрд░ рд╡рд╛рд╣рди рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ:

  • рдореЙрдбрд▓, рдкреВрд░реЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧ рдФрд░ рдкрд╛рдмрдВрджрд┐рдпрд╛рдВ рдХреИрдкреНрдЪрд░ рдХрд░рддрд╛ рд╣реИ. рдЗрд╕рдореЗрдВ Shipments рдФрд░ Vehicles, рджреЛрдиреЛрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ.
  • рд╢рд┐рдкрдореЗрдВрдЯ, рдЯрд╛рд╕реНрдХ рдпрд╛ рдЕрд╕рд▓ рд╢рд┐рдкрдореЗрдВрдЯ рдХреЛ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ. рдЗрдирдореЗрдВ рдкрд┐рдХрдЕрдк рдФрд░ рдбрд┐рд▓реАрд╡рд░реА VisitRequest рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИрдВ. рд╢рд┐рдкрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп рд╕реЗрдЯрд┐рдВрдЧ рдФрд░ рдкрд╛рдмрдВрджрд┐рдпрд╛рдВ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИрдВ.
  • рд╡рд╛рд╣рди, рд╡рд╛рд╣рдиреЛрдВ, рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдпрд╛ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЛ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ. рд╡рд╛рд╣рдиреЛрдВ рдкрд░ рднреА рд╕реНрдерд╛рдиреАрдп рд╕реЗрдЯрд┐рдВрдЧ рдФрд░ рдкрд╛рдмрдВрджрд┐рдпрд╛рдВ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИрдВ.

рд╣рд░ рдЗрдХрд╛рдИ рдХреА рдкреНрд░реЙрдкрд░реНрдЯреА, рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрд┐рд╕реА рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рддреА рд╣реИрдВ. рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА, рдХрд┐рд╕реА рдЦрд╛рд╕ рд▓реЗрд╡рд▓ рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рд╣реЛрддреА рд╣реИ. рдореЙрдбрд▓ рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рддрдп рдХреА рдЧрдИ рдкрд╛рдмрдВрджрд┐рдпрд╛рдВ, рд╕рднреА рд╢рд┐рдкрдореЗрдВрдЯ рдФрд░ рд╡рд╛рд╣рдиреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИрдВ. рд╡рд╣реАрдВ, рд╢рд┐рдкрдореЗрдВрдЯ рдпрд╛ рд╡рд╛рд╣рдиреЛрдВ рдХреЗ рд▓рд┐рдП рддрдп рдХреА рдЧрдИ рдкрд╛рдмрдВрджрд┐рдпрд╛рдВ рдФрд░ рдкреНрд░реЙрдкрд░реНрдЯреА, рдХрд┐рд╕реА рдПрдХ рд╢рд┐рдкрдореЗрдВрдЯ рдпрд╛ рд╡рд╛рд╣рди рдХреЗ рд▓рд┐рдП рд╣реЛрддреА рд╣реИрдВ.

рд╣рд░ рдореИрд╕реЗрдЬ рдЯрд╛рдЗрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрд░реА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, ShipmentModel (REST, gRPC), Shipment (REST, gRPC), рдФрд░ Vehicle (REST, gRPC) рдореИрд╕реЗрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдиреЗ рд╡рд╛рд▓рд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджреЗрдЦреЗрдВ.

OptimizeToursRequest рдкреНрд░реЙрдкрд░реНрдЯреА

рдЯреЙрдк-рд▓реЗрд╡рд▓ OptimizeToursRequest рдореИрд╕реЗрдЬ (REST, gRPC) рдХреА рдХреБрдЫ рдРрд╕реА рдкреНрд░реЙрдкрд░реНрдЯреА рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдЖрдо рддреМрд░ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ. рдЗрдирдореЗрдВ рдпреЗ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  • searchMode рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рддрдп рдХреА рдЧрдИ рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд╣рд▓реЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рджрд┐рдЦрд╛рдирд╛ рд╣реИ рдпрд╛ рддрдп рд╕рдордпрд╕реАрдорд╛ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдвреВрдВрдврдирд╛ рд╣реИ.
  • considerRoadTraffic рдпрд╣ рдХреБрдХреА рддрдп рдХрд░рддреА рд╣реИ рдХрд┐ рд░реВрдЯрд┐рдВрдЧ рдФрд░ рдИрдЯреАрдП рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓рд╛рдЗрд╡ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрд╛ рдирд╣реАрдВ.
  • populateTransitionPolylines рд╕реЗ рдпрд╣ рддрдп рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЬрд╡рд╛рдм рдореЗрдВ рд░рд╛рд╕реНрддреЗ рдХреА рдкреЙрд▓реАрд▓рд╛рдЗрди рдФрд░ рд░рд╛рд╕реНрддреЗ рдХреЗ рдЯреЛрдХрди рджрд┐рдЦрд╛рдП рдЬрд╛рдПрдВ рдпрд╛ рдирд╣реАрдВ.

рдореЙрдбрд▓ рдХреА рдкреНрд░реЙрдкрд░реНрдЯреА

ShipmentModel рдореИрд╕реЗрдЬ рдХреА рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдкреНрд░реЙрдкрд░реНрдЯреА (REST, gRPC) рдореЗрдВ рдпреЗ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  • globalStartTime рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рд╡рд╛рд╣рдиреЛрдВ рдФрд░ рд╢рд┐рдкрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП, рд░рд╛рд╕реНрддреЛрдВ рдХреЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдкрд╣рд▓рд╛ рд╕рдордп рдХреНрдпрд╛ рд╣реИ. рдХреЛрдИ рднреА рд╡рд╛рд╣рди, рдЗрд╕ рд╕рдордп рд╕реЗ рдкрд╣рд▓реЗ рдЕрдкрдиреА рдкрд╣рд▓реА рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди рдФрд░ рд╢рд┐рдкрдореЗрдВрдЯ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛.
  • globalEndTime рд╕реЗ рд╕рднреА рд╡рд╛рд╣рдиреЛрдВ рдФрд░ рд╢рд┐рдкрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП, рд░рд╛рд╕реНрддреЗ рдореЗрдВ рд▓рдЧрдиреЗ рд╡рд╛рд▓реЗ рд╕рдмрд╕реЗ рдЬрд╝реНрдпрд╛рджрд╛ рд╕рдордп рдХреА рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓рддреА рд╣реИ. рдЗрд╕ рд╕рдордп рд╕реЗ рдкрд╣рд▓реЗ, рдЕрд╕рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╕рднреА рд╢рд┐рдкрдореЗрдВрдЯ рдФрд░ рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди рдкреВрд░реЗ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП.

рд╢рд┐рдкрдореЗрдВрдЯ рдХреА рдкреНрд░реЙрдкрд░реНрдЯреА

Shipment рдореИрд╕реЗрдЬ рдХреА рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдкреНрд░реЙрдкрд░реНрдЯреА (REST, gRPC) рдореЗрдВ рдпреЗ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  • pickups[] рдФрд░ deliveries[] рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╢рд┐рдкрдореЗрдВрдЯ рдХреЛ рдХрд╣рд╛рдВ рд╕реЗ рдкрд┐рдХ рдЕрдк рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдХрд╣рд╛рдВ рдбреНрд░реЙрдк рдСрдлрд╝ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. pickups[] рдФрд░ deliveries[] рдкреНрд░реЙрдкрд░реНрдЯреА, рджреЛрдиреЛрдВ VisitRequest рдореИрд╕реЗрдЬ (REST, gRPC) рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреА рд╣реИрдВ.
  • loadDemands рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рд╡рд╛рд╣рди рдХреЛ рд╢рд┐рдкрдореЗрдВрдЯ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдирд╛ рд▓реЛрдб рд▓реЗ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛. рд╡рд╛рд╣рди рдХреА load_limits (REST, gRPC) рдкреНрд░реЙрдкрд░реНрдЯреА рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╣рди рдореЗрдВ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рд╛рдорд╛рди рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рд▓реЛрдб рдХреА рдорд╛рдВрдЧ рдФрд░ рд╕реАрдорд╛рдПрдВ рдореЗрдВ рд▓реЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╝реНрдпрд╛рджрд╛ рдкрдврд╝реЗрдВ.
  • penalty_cost рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╢рд┐рдкрдореЗрдВрдЯ рдХреЛ рд╕реНрдХрд┐рдк рдХрд░рдиреЗ рдкрд░ рдХрд┐рддрдирд╛ рд╢реБрд▓реНрдХ рд▓рдЧрддрд╛ рд╣реИ. рд▓рд╛рдЧрдд рдореЙрдбрд▓ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рд▓рд╛рдЧрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╝реНрдпрд╛рджрд╛ рдкрдврд╝реЗрдВ.

рд╡рд╛рд╣рди рдХреА рдкреНрд░реЙрдкрд░реНрдЯреА

Vehicle рдореИрд╕реЗрдЬ рдХреА рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдкреНрд░реЙрдкрд░реНрдЯреА (REST, gRPC) рдореЗрдВ рдпреЗ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  • startLocation рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╣рди рдХреЛ рдЕрдкрдирд╛ рд░рд╛рд╕реНрддрд╛ рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП. рдЗрд╕ рдкреНрд░реЙрдкрд░реНрдЯреА рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рдЬрд╝рд░реВрд░реА рдирд╣реАрдВ рд╣реИ. рдЕрдЧрд░ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рджреА рдЬрд╛рддреА рд╣реИ, рддреЛ рд╡рд╛рд╣рди рдХрд╛ рд░реВрдЯ рдЙрд╕ рдЬрдЧрд╣ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЙрд╕реЗ рдкрд╣рд▓реА рдмрд╛рд░ рд╢рд┐рдкрдореЗрдВрдЯ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ.
  • endLocation рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╣рди рдХрд╛ рд░рд╛рд╕реНрддрд╛ рдХрд╣рд╛рдВ рдЦрддреНрдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП. рдЗрд╕ рдкреНрд░реЙрдкрд░реНрдЯреА рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рдЬрд╝рд░реВрд░реА рдирд╣реАрдВ рд╣реИ. рдЕрдЧрд░ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рджреА рдЬрд╛рддреА рд╣реИ, рддреЛ рд╡рд╛рд╣рди рдХрд╛ рд░реВрдЯ рдЙрд╕ рдЬрдЧрд╣ рдкрд░ рдЦрддреНрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЙрд╕реЗ рдЖрдЦрд┐рд░реА рдмрд╛рд░ рд╢рд┐рдкрдореЗрдВрдЯ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рдерд╛.
  • startTimeWindows[] рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╣рди рдХрдм рдЕрдкрдирд╛ рд░рд╛рд╕реНрддрд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ. рдЗрд╕ рдкреНрд░реЙрдкрд░реНрдЯреА рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рдЬрд╝рд░реВрд░реА рдирд╣реАрдВ рд╣реИ.
  • endTimeWindows[] рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рд╡рд╛рд╣рди рдХрдм рдЕрдкрдирд╛ рд░рд╛рд╕реНрддрд╛ рд╢реБрд░реВ рдФрд░ рдЦрддреНрдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ. рджреЛрдиреЛрдВ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреА рд╡реИрд▓реНрдпреВ рджреЗрдирд╛ рдЬрд╝рд░реВрд░реА рдирд╣реАрдВ рд╣реИ.
  • loadLimits рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╢рд┐рдкрдореЗрдВрдЯ рдХреА рдорд╛рдВрдЧ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд╛рд╣рди рдХреА рдХрд┐рддрдиреА рдХреНрд╖рдорддрд╛ рдЙрдкрд▓рдмреНрдз рд╣реИ. рд▓реЛрдб рдбрд┐рдорд╛рдВрдб рдФрд░ рд╕реАрдорд╛рдПрдВ рдореЗрдВ рд▓реЛрдб рдбрд┐рдорд╛рдВрдб рдФрд░ рд╕реАрдорд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╝реНрдпрд╛рджрд╛ рдкрдврд╝реЗрдВ.

JSON рдлрд╝реЙрд░реНрдореИрдЯ рдореЗрдВ рдЕрдиреБрд░реЛрдз рдХрд╛ рдкреВрд░рд╛ рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

{
  "model": {
    "shipments": [
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.73881799999999,
              "longitude": -122.4161
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.79581,
              "longitude": -122.4218856
            }
          }
        ]
      }
    ],
    "vehicles": [
      {
        "startLocation": {
          "latitude": 37.73881799999999,
          "longitude": -122.4161
        },
        "endLocation": {
          "latitude": 37.73881799999999,
          "longitude": -122.4161
        },
        "costPerKilometer": 1.0
      }
    ],
   "globalStartTime": "2024-02-13T00:00:00.000Z",
   "globalEndTime": "2024-02-14T06:00:00.000Z"
  }
}

OptimizeTours рдФрд░ BatchOptimizeTours, рджреЛрдиреЛрдВ рд╣реА рдЕрдиреБрд░реЛрдз рд╡рд╛рд▓реЗ рдореИрд╕реЗрдЬ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВ. рдЬреИрд╕реЗ, рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рджреЛрдиреЛрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ. рд░рд╛рд╕реНрддреЗ рдХреЛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рд╕рдордЭрдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИ рдХрд┐ рдЗрди рджреЛрдиреЛрдВ рддрд░реАрдХреЛрдВ рдореЗрдВ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ:

OptimizeTours рдФрд░ BatchOptimizeTours рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛