1

Некорректно проходит оптимизация

Тема: Некорректно проходит оптимизация

Добрый день.

Пытаюсь провести оптимизацию маршрута, маршрут расчитывается неоптимально.

Как создаю маршрут:
1. Через запрос "core/batch" передаю JSON-массивы с заявками. В этом массиве также присутствует JSON для заявки, которая является складом. Для заявок устанавливаю флаг 1, для склада - "0x4"
2. Сохраняю идентификаторы полученных заявок
3. Делаю запрос "order/optimize", в массиве orders передаю идентификаторы заявок, в массиве warehouses передаю идентификатор заявки-склада.
4. Из полученных заявок беру параметр p, сортирую заявки согласно параметра id

В каких-то случаях все нормально отрабатывает, маршрут начинается со склада и идет оптимально, а в каких-то случаях - склад где-то посередине, весь маршрут расчитывается неоптимально (например, из 8 заявок 5 в одном городе и 3 в другом городе, так маршрут строится так - несколько заявок из 1 города, затем 1 заявка из второго, затем опять заявки из первого, потом - из второго и тд, причем сам склад, с которого все должэно начинаться - предпоследний(!) ). Флаги для оптимизации пытался установить разные: 0, 419, "0x2", результат везде один и тот же.

Вот скриншот с созданным маршрутом:
http://joxi.ru/xAenRk0cpVyeVr

При этом, если я удаляю эти точки и строю маршрут через веб-интерфейс, то маршрут корректно строится.

Вот что заметил: когда строю маршрут через АПИ, то маршрут соединен пунктирной линией, склад отмечен как обычная точка.
Если делать через веб-интерфейс, то точки маршрута соединены тонкой прямой линией, в списке заявок склад отмечен отдельно от заявок (перед ним иконка домика)

Перечитал форум, особенно тему "Правильная последовательность действий при создании маршрута" https://forum.gurtam.com/viewtopic.php?id=11950, но нормального внятного ответа не нашел.

Собственно вопрос:
1. Как повторить логику работы приложения чтобы склад загружался ОТДЕЛЬНО и стоял ВПЕРЕДИ и отдельно от точек?
2. Как правильно оптимизировать маршрут чтобы он расставлял точки маршрута в корректной последовательности?

Спасибо!


Вот мои запросы:
1. https://hst-api.wialon.com/wialon/ajax.html?params=[{"svc":"order\/update","params":{"uid":0,"id":0,"n":12666,"p":{"n":"Client+name","p":"+79034106060","p2":"+79615102240","e":"joe@mail.ru","a":"\u041a\u0440\u0430\u0441\u043d\u043e\u0434\u0430\u0440+\u0443\u043b.\u0421\u0435\u043b\u0435\u0437\u043d\u0435\u0432\u0430+50","v":8700,"w":0,"c":0,"d":"factory","ut":600,"t":"","r":{"id":1532878946,"vt":2,"i":0,"m":0,"t":0},"cid":"","uic":"","ntf":19,"tags":[]},"f":1,"tf":1532876400,"tt":1532887200,"r":100,"y":45.0270805359,"x":39.026348114,"u":"17222425","trt":3600,"itemId":17087027,"callMode":"create"}},{"svc":"order\/update","params":{"uid":0,"id":0,"n":13326,"p":{"n":"Client+name","p":"+79034106060","p2":"+79615102240","e":"joe@mail.ru","a":"\u041a\u0440\u0430\u0441\u043d\u043e\u0434\u0430\u0440+\u0443\u043b.\u041e\u0431\u0440\u044b\u0432\u043d\u0430\u044f,+135","v":8700,"w":0,"c":0,"d":"factory","ut":600,"t":"","r":{"id":1532878946,"vt":3,"i":0,"m":0,"t":0},"cid":"","uic":"","ntf":19,"tags":[]},"f":1,"tf":1532876400,"tt":1532887200,"r":100,"y":44.9957504272,"x":39.0240592957,"u":"17222425","trt":3600,"itemId":17087027,"callMode":"create"}},{"svc":"order\/update","params":{"uid":0,"id":0,"n":14296,"p":{"n":"Client+name","p":"+79034106060","p2":"+79615102240","e":"joe@mail.ru","a":"\u041a\u0440\u0430\u0441\u043d\u043e\u0434\u0430\u0440+\u0443\u043b.\u0423\u0440\u0430\u043b\u044c\u0441\u043a\u0430\u044f+10","v":8700,"w":0,"c":0,"d":"factory","ut":600,"t":"","r":{"id":1532878946,"vt":4,"i":0,"m":0,"t":0},"cid":"","uic":"","ntf":19,"tags":[]},"f":1,"tf":1532876400,"tt":1532887200,"r":100,"y":45.0305099487,"x":39.0294914246,"u":"17222425","trt":3600,"itemId":17087027,"callMode":"create"}},{"svc":"order\/update","params":{"uid":0,"id":0,"n":15220,"p":{"n":"Client+name","p":"+79034106060","p2":"+79615102240","e":"joe@mail.ru","a":"\u041a\u0440\u0430\u0441\u043d\u043e\u0434\u0430\u0440+\u0443\u043b.\u0410\u0434\u044b\u0433\u0435\u0439\u0441\u043a\u0430\u044f+\u041d\u0430\u0431\u0435\u0440\u0435\u0436\u043d\u0430\u044f,+34","v":8700,"w":0,"c":0,"d":"factory","ut":600,"t":"","r":{"id":1532878946,"vt":5,"i":0,"m":0,"t":0},"cid":"","uic":"","ntf":19,"tags":[]},"f":1,"tf":1532876400,"tt":1532887200,"r":100,"y":45.0155601501,"x":38.9914207458,"u":"17222425","trt":3600,"itemId":17087027,"callMode":"create"}},{"svc":"order\/update","params":{"uid":0,"id":0,"n":16816,"p":{"n":"Client+name","p":"+79034106060","p2":"+79615102240","e":"joe@mail.ru","a":"\u041a\u0440\u0430\u0441\u043d\u043e\u0434\u0430\u0440+\u0443\u043b.\u0412\u0430\u0441\u043d\u0435\u0446\u043e\u0432\u0430+2","v":8700,"w":0,"c":0,"d":"factory","ut":600,"t":"","r":{"id":1532878946,"vt":6,"i":0,"m":0,"t":0},"cid":"","uic":"","ntf":19,"tags":[]},"f":1,"tf":1532876400,"tt":1532887200,"r":100,"y":45.0272903442,"x":39.0273094177,"u":"17222425","trt":3600,"itemId":17087027,"callMode":"create"}},{"svc":"order\/update","params":{"uid":0,"id":0,"n":13747,"p":{"n":"Client+name","p":"+79034106060","p2":"+79615102240","e":"joe@mail.ru","a":"\u0422\u0438\u0445\u043e\u0440\u0435\u0446\u043a,+\u0443\u043b.+\u0413\u0440\u0430\u0436\u0434\u0430\u043d\u0441\u043a\u0430\u044f+95.","v":8700,"w":0,"c":0,"d":"factory","ut":600,"t":"","r":{"id":1532878946,"vt":7,"i":0,"m":0,"t":0},"cid":"","uic":"","ntf":19,"tags":[]},"f":1,"tf":1532876400,"tt":1532887200,"r":100,"y":45.8701515198,"x":40.1302909851,"u":"17222425","trt":3600,"itemId":17087027,"callMode":"create"}},{"svc":"order\/update","params":{"uid":0,"id":0,"n":13743,"p":{"n":"Client+name","p":"+79034106060","p2":"+79615102240","e":"joe@mail.ru","a":"\u0422\u0438\u0445\u043e\u0440\u0435\u0446\u043a,+\u041c\u043e\u0441\u043a\u043e\u0432\u0441\u043a\u0430\u044f+339","v":8700,"w":0,"c":0,"d":"factory","ut":600,"t":"","r":{"id":1532878946,"vt":8,"i":0,"m":0,"t":0},"cid":"","uic":"","ntf":19,"tags":[]},"f":1,"tf":1532876400,"tt":1532887200,"r":100,"y":45.8673782349,"x":40.1135101318,"u":"17222425","trt":3600,"itemId":17087027,"callMode":"create"}},{"svc":"order\/update","params":{"uid":0,"id":0,"n":13742,"p":{"n":"Client+name","p":"+79034106060","p2":"+79615102240","e":"joe@mail.ru","a":"\u0422\u0438\u0445\u043e\u0440\u0435\u0446\u043a+,+\u0410\u0447\u043a\u0430\u0441\u043e\u0432\u0430+92","v":8700,"w":0,"c":0,"d":"factory","ut":600,"t":"","r":{"id":1532878946,"vt":9,"i":0,"m":0,"t":0},"cid":"","uic":"","ntf":19,"tags":[]},"f":1,"tf":1532876400,"tt":1532887200,"r":100,"y":45.8547897339,"x":40.1556892395,"u":"17222425","trt":3600,"itemId":17087027,"callMode":"create"}},{"svc":"order\/update","params":{"uid":0,"id":0,"n":"\u0421\u043a\u043b\u0430\u0434","p":{"n":"\u0421\u043a\u043b\u0430\u0434","p":"+79034106060","p2":"+79615102240","e":"joe@mail.ru","a":"\u041a\u0440\u0430\u0441\u043d\u043e\u0434\u0430\u0440,+\u0421\u0442\u0430\u0441\u043e\u0432\u0430+1-\u0439+\u043f\u0440\u043e\u0435\u0437\u0434,+1\u0410","v":8700,"w":0,"c":0,"d":"factory","ut":600,"t":"","r":{"id":1532878946,"vt":null,"i":0,"m":0,"t":0},"cid":"","uic":"","ntf":19,"tags":[],"pr":1},"f":"0x4","tf":1532876400,"tt":1532887200,"r":100,"y":45.0024185181,"x":39.027431488,"u":null,"trt":3600,"itemId":17087027,"callMode":"create"}}]&svc=core/batch&sid=<SID>

2. https://hst-api.wialon.com/wialon/ajax.html?params={"itemId":17087027,"orders":[780,781,783,802,803,804,805,806],"warehouses":[807],"units":[17222425],"flags":419,"gis":{"addPoints":1,"provider":1}}&svc=order/optimize&sid=<SID>

2

Некорректно проходит оптимизация

(30/07/2018 12:43:50 отредактировано stal)

Re: Некорректно проходит оптимизация

ag.prozorov пишет:

4. Из полученных заявок беру параметр p, сортирую заявки согласно параметра id

Вероятно ошибка в этом. Сортировать результат от optimize не нужно. Он отдает как раз в нужном порядке. У вас будет что-то такое:

{
  "17222425": {
    "orders": [
      {
        "id": 8,
        "ml": 0,
        "tm": 1533876400,
        "p": ""
      },
      {
        "id": 4,
        "ml": 0,
        "tm": 1533877110,
        "p": "cqc~DqyxoE??"
      },
      {
        "id": 0,
        "ml": 0,
        "tm": 1533877820,
        "p": "cqc~DqyxoE??"
      },
      {
        "id": 5,
        "ml": 0,
        "tm": 1533878530,
        "p": "cqc~DqyxoE??"
      },
      {
        "id": 2,
        "ml": 0,
        "tm": 1533879240,
        "p": "cqc~DqyxoE??"
      },
      {
        "id": 6,
        "ml": 0,
        "tm": 1533879950,
        "p": "cqc~DqyxoE??"
      },
      {
        "id": 7,
        "ml": 0,
        "tm": 1533880660,
        "p": "cqc~DqyxoE??"
      },
      {
        "id": 3,
        "ml": 0,
        "tm": 1533881370,
        "p": "cqc~DqyxoE??"
      },
      {
        "id": 1,
        "ml": 0,
        "tm": 1533882080,
        "p": "cqc~DqyxoE??"
      }
    ]
  },
  "success": 1
}

В данном ответе, id это порядковый номер заявки в запросе, как они перечислены в нем.
"orders":[780,781,783,802,803,804,805,806],"warehouses":[807].  Можно пронумеровать:
id:0 - 780
id:1 - 781
id:2 - 783
id:3 - 802
id:4 - 803
id:5 - 804
id:6 - 805
id:7 - 806
id:8 - 807

Первым в ответе оптимайза id:8 - это 807 (склад).
Далее идет id:4 - это 803 заявка.
И т.д.

Итого если так перевести все id из ответа оптимайза в id заявок поданных в запросе получится правильная последовательность: 807,803,780,804,783,805,806,802,781

Значение tm надо передать в заявки в параметр vt.

Если правильно читать ответ от order/optimize то склад никак не может оказаться посреди заявок. Если только это не промежуточный склад (флаг 0x10) или распределение с разрывом маршрута по лимитам (но тогда это будет видно по формату ответа - каждый маршрут в своей коллекции)

3

Некорректно проходит оптимизация

Re: Некорректно проходит оптимизация

Спасибо, действительно проблема оказалась в том, что я сортировал заявки, приходящие от запроса на оптимизацию, по полю ID. Этого делать было не нужно. Переделал, все теперь работает