Метод Кларка-Райта. Оптимальное планирование маршрутов грузоперевозок

Публикация № 443585 10.02.16

Приемы и методы разработки - Математика и алгоритмы

оптимизация грузоперевозки маршрут метод Кларка-Райта

Одной из наиболее важных задач каждого предприятия, осуществляющего доставку грузов в крупных населенных пунктах, является сокращение издержек. Возможное решение данной проблемы заключается в сокращении пробега автотранспорта и, как следствие, уменьшении расхода ГСМ. Появляются такие вопросы ... - СКОЛЬКО НУЖНО МАШИН ДЛЯ РАЗВОЗКИ КОНКРЕТНОГО ОБЪЕМА ГРУЗА ПО АДРЕСАМ ДОСТАВКИ ? - КАК РАЗБИТЬ ТОЧКИ ДОСТАВКИ НА ОПТИМАЛЬНЫЕ ПО ПРОБЕГУ И ЗАГРУЗКЕ МАШИН МАРШРУТЫ ? ... В этой статье Вы найдете один из многих способов получить ответ на эти вопросы.

ВВЕДЕНИЕ

ПОСТАНОВКА ЗАДАЧИ

ПОДГОТОВИТЕЛЬНАЯ РАБОТА

ПОШАГОВОЕ ОПИСАНИЕ АЛГОРИТМА КЛАРКА_РАЙТА

ОПИСАНИЕ ПОСЛЕДОВАТЕЛЬНОГО РЕШЕНИЯ МЕТОДОМ КЛАРКА_РАЙТА

РЕЗУЛЬТАТЫ РЕШЕНИЯ


ВВЕДЕНИЕ.

Описанный метод используется в программе "Простое формирование маршрутов. Работа с картой. Расчет оптимальных вариантов доставки"

  

В статье "Оптимизация планирования доставки грузов. Алгоритм кластеризации k-means (метод K-средних)" было показано, КАК ПОЛУЧИТЬ ОПТИМАЛЬНЫЕ МАРШРУТЫ ДЛЯ ЗАДАННОГО КОЛИЧЕСТВА А/ТРАНСПОРТА из указанного места отгрузки, при этом грузоподъемность транспорта не принималась во внимание .
В этой статье покажем КАК УЗНАТЬ КОЛИЧЕСТВО НЕОБХОДИМОГО А/ТРАНСПОРТА С УЧЕТОМ ЕГО ГРУЗОПОДЪЕМНОСТИ ДЛЯ ФОРМИРОВАНИЯ ОПТИМАЛЬНЫХ МАРШРУТОВ.

Итак, поставлена задача отыскать самый выгодный маршрут движения транспорта, проходящий по одному разу через указанные пункты с последующим возвратом в исходный пункт (база). Критериями оптимальности в данной постановке задачи являются: минимальный пробег транспортного средства при максимальной загрузке кузова.

Сформулированная задача известна как «задача коммивояжера». Существует множество математических методов, позволяющих найти как точное, так и приближенное решение поставленной задачи. Среди методов, дающих точное решение, наиболее известны:

  • «полный перебор»
  • «метод ветвей и границ» 

Основным недостатком данных методов является высокая временная и емкостная сложность, что важно учитывать при большом количестве пунктов. Все эффективные (сокращающие полный перебор) методы решения «задачи коммивояжера» – методы эвристические. Из них наибольшее применение нашли:

  • «метод генетических алгоритмов» 
  • «метод Кларка-Райта» 
  • «алгоритм муравьиной колонии» 
  • «метод ближайшего соседа» 
  • «метод включения ближайшего города» 
  • «метод самого дешевого включения» 

Для решения нашей задачи наиболее приемлемым методом является метод Кларка-Райта. Он относится к числу приближенных, итерационных методов и может использоваться для компьютерного решения задачи развозки. Погрешность решения не превосходит в среднем 5–10 %. Достоинствами метода являются его простота, надежность и гибкость, что позволяет учитывать целый ряд дополнительных факторов, влияющих на конечное решение задачи.

Рассмотрим на примере, как применять метод Кларка-Райта

ПОСТАНОВКА ЗАДАЧИ.

Из исходного пункта, в котором располагается грузовой терминал (склад), необходимо доставить грузы 12 получателям. 

таблица координат

Таблица 1. Координаты и объем спроса получателей

Координаты грузового терминала (склада): x0 = 10, y0 = 15. Для доставки будет использоваться транспорт с максимальной грузовместимостью = 1500 шт.

ВОПРОС: Какое количество транспорта понадобится для развозки грузов ? Какая схема развозки будет оптимальной ?


ПОДГОТОВИТЕЛЬНАЯ РАБОТА.

Отметим эти точки в декартовой системе координат. Местоположение оптовой базы и 12 получателей, а также объем поставок каждому получателю приведены на рисунке 1. 

Таблица 2

Рисунок 1. Расположение базы и пунктов доставки

Начальная схема маршрутов предполагает что для доставки груза каждому отдельному получателю организуется отдельный маршрут (см. рис. 2). Например, водитель загружает в кузов партию 450 шт. и везет ее в пункт 1, там разгружается, затем возвращается на базу, берет вторую партию 400 шт. и везет ее в пункт 2 и т.д. Таким образом, исходная схема развозки включает в себя только радиальные маршруты движения автомобиля, причем количество радиальных маршрутов совпадает с количеством получателей. В данном случае, схема развозки состоит из 12 радиальных маршрутов.

 Схема развозки

Рисунок 2. Начальная схема доставки груза

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

Маршруты

 Рисунок 3. Схемы доставки

На рисунке 3. отображены две схемы доставки. Схема доставки А (слева) обеспечивает доставку грузов в пункты 1 и 2 по радиальным маршрутам. В этом случае суммарный пробег автотранспорта равен:

 La = d01 + d10 + d02 + d20 = 2d01 + 2d02

Схема доставки B предполагает доставку грузов в пункты 1 и 2 по кольцевому маршруту. Тогда пробег автотранспорта составляет:

 Lв = d01 + d12 + d02

Схема В по показателю пробега автотранспорта дает, как правило, лучший результат, чем схема А. И поэтому при переходе от схемы А к схеме В получаем следующий километровый выигрыш:

 S12 = La - Lв = d01 + d02 - d12

В общем случае мы имеем километровый выигрыш:

 Sij = d0i + d0j - dij

где Sij – километровый выигрыш, получаемый при объединении пунктов i и j, км; d0i, d0j – расстояние между оптовой базой и пунктами i и j соответственно, км; dij – расстояние между пунктами i и j, км. 

 Полученные значения заносятся в таблицу 2., где представлены расстояния между пунктами dij (правая верхняя часть матрицы) и километровые выигрыши Sij (левая нижняя часть матрицы).

 Матрица

Таблица 2. Матрица расстояний и километровых выигрышей

Теперь вернемся к нашему примеру. Из табл. 1 возьмем данные:

  • Пункт 0 (это база): x0 = 10, y0 = 15
  • Пункт 1: х1 = 17, у1 = 15
  • Пункт 2: х2 = 6, у2 = 15
  • Пункт 3: x3 = 13, y3 = 3
  • и т.д.

Рассчитаем расстояние d01 между пунктами 0 и 1 по формуле:

Формула1

Аналогично получаем расстояние:

  • для пунктов 0 и 2d02 = 4
  • для пунктов 0 и 3d03 = 12,37
  • для пунктов 1 и 2d12 = 11
  • для пунктов 1 и 3d13 = 12,65
  • для пунктов 2 и 3d23 = 13,89
  • и т.д

Потом для пунктов i и j получаем километровый выигрыш  Sij = d0i + d0j - dij:

  • для пунктов 1 и 2S12 = d01 + d02 - d12 = 7 + 4 - 11 = 0
  • для пунктов 1 и 3S13 = d01 + d03 - d13 = 7 + 12.37 - 12.65 = 6.72
  • для пунктов 2 и 3S13 = d02 + d03 - d23 = 4 + 12.37 - 13.89 = 2.48
  • и т.д.

Полученные значения заносим в таблицу 3., где представлены расстояния между пунктами dij (правая верхняя часть матрицы) и километровые выигрыши sij (левая нижняя часть матрицы):

 Матрица (пример)

Таблица 3. Расчетная матрица расстояний и километровых выигрышей

Теперь, когда проведена вся необходимая подготовительная работа, приступим непосредственно к решению задачи.

ПОШАГОВОЕ ОПИСАНИЕ АЛГОРИТМА КЛАРКА-РАЙТА.

Демонстрация использования данного алгоритма применительно к рассматриваемой задаче приводится в табл. 4 и соответствующих комментариях к ней.

Шаг 1.

На матрице километровых выигрышей находим ячейку (i*, j*) с максимальным километровым выигрышем Smax:

 формула2

При этом должны соблюдаться следующие три условия:

  1. пункты i* и j* не входят в состав одного и того же маршрута;
  2. пункты i* и j* являются начальным и/или конечным пунктом тех маршрутов, в состав которых они входят;
  3. ячейка (i*, j*) не заблокирована (т.е. рассматривалась на предыдущих шагах алгоритма).

Если удалось найти такую ячейку, которая удовлетворяет трем указанным условиям, то переход к шагу 2. Если не удалось, то переход к шагу 6.

Шаг 2.

Маршрут, в состав которого входит пункт i*, обозначим как маршрут 1. Соответственно, маршрут, в состав которого входит пункт j*, обозначим как маршрут 2.

Введем следующие условные обозначения:

N = {1, 2, …, n} – множество получателей;

формула3 – подмножество пунктов, входящих в состав маршрута 1;

формула4 – подмножество пунктов, входящих в состав маршрута 2.

Очевидно, что формула5 (согласно шагу 1, условие 1).

Рассчитаем суммарный объем поставок по маршрутам 1 и 2:

формула6
где qk – объем спроса k-го пункта, шт (см табл. 4).

Шаг 3.

Проверим на выполнение следующее условие:

формула7

где c – грузовместимость автомобиля, шт.

Если условие выполняется, то переход к шагу 4, если нет – к шагу 5.

Шаг 4.

Производим объединение маршрутов 1 и 2 в один общий кольцевой маршрут X. Будем считать, что пункт i* является конечным пунктом маршрута 1, а пункт j* – начальным пунктом маршрута 2. При объединении маршрутов 1 и 2 соблюдаем следующие условия:

  • последовательность расположения пунктов на маршруте 1 от начала и до пункта i* не меняется;
  • пункт i* связывается с пунктом j*;
  • последовательность расположения пунктов на маршруте 2 от пункта j* и до конца не меняется.

Шаг 5.

Повторяем шаги 1-4 до тех пор, пока при очередном повторении не удастся найти Smax, который удовлетворяет трем условиям из шага 1.

Шаг 6.

Рассчитываем суммарный пробег автотранспорта.


ОПИСАНИЕ ПОСЛЕДОВАТЕЛЬНОГО РЕШЕНИЯ МЕТОДОМ КЛАРКА_РАЙТА.

Весь ход последовательного решения задачи представлен в таблице 4.

Матрица результата

 Таблица 4. Ходы и промежуточные результаты решения задачи

Графа 1 – номер итерации.

Графы 2, 3 – номера пунктов i* и j*, которые обозначают ячейку с максимальным километровым выигрышем Smax = s(i*,j*), найденную в результате просмотра матрицы километровых выигрышей (см. табл. 3).

Графа 4 – значение максимального километрового выигрыша Smax.

Графы 5, 6 и 7 – результаты проверки условий 1, 2 и 3 при выполнении шага 1. “+” – положительный результат, “–” – отрицательный результат.

Графы 8 и 9 – объем перевозок по маршруту 1, в состав которого входит пункт i* (q1), и маршруту 2, в состав которого входит пункт j* (q2).

Графа 10 – проверка на условие формула7, где c – грузовместимость транспортного средства. “+” – положительный результат проверки условия, “–” – отрицательный результат.

Графа 11 – порядковый номер кольцевого маршрута (всего в ходе решения получено всего четыре кольцевых маршрута, см. рис. 4).

Графа 12 – структура кольцевого маршрута, образовавшегося на данной итерации.

Кольцевые маршруты

Рисунок 4. Графическое представление оптимальной схемы доставки

Рассмотрим, как происходит поэтапный поиск оптимального решения задачи. Начнем с того, что исходный план развозки состоит из 12 радиальных маршрутов, когда доставка груза в каждый из пунктов назначения осуществляется по отдельному маршруту (см. рис. 2). При этом общий пробег автотранспорта составляет (см. треугольную матрицу расстояний, табл. 3):

L0 = 2*d01 + 2*d02 + ... + 2*d012 = 2*7.0 + 2*4.0 + 2*12.4 + 2*5.1 + ... + 2*7.3 = 195 км.

 Теперь начнем пошаговый переход к новому оптимальному решению задачи, которое за счет объединения радиальных маршрутов в кольцевые позволит уменьшить суммарный пробег автотранспорта (графически это новое решение представлено на рис. 4).

 

Итерация 1.

  • Объединяем два радиальных маршрута:  0-8-0 (объем доставки 200 шт.) и 0-3-0 (объем доставки 400 шт.) в общий кольцевой маршрут (под № 1) 0-8-3-0 (объем доставки 600 шт.). При этом суммарный пробег автотранспорта сокращается на 23,0 км.

Итерация 2.

  • К кольцевому маршруту № 1– 0-8-3-0 (600 шт.) присоединяем радиальный маршрут 0-5-0 (150 шт.). При этом пункт 5 присоединяем к пункту 8, в результате чего получаем новую структуру кольцевого маршрута 0-5-8-3-0 (750 шт.). Суммарный пробег автотранспорта сокращается еще на 21,4 км. 
  • Отметим важность соблюдения последовательности пунктов в кольцевом маршруте: именно 0-5-8-3-0, а не 0-5-3-8-0 или 0-8-3-5-0.
  • Если i* = 8 и j* = 5, то после объединения они должны стоять на маршруте друг за другом.

 Итерация 3.

  • Объединение пунктов 3 и 5 обеспечило бы выигрыш в 17,2 км. Но это объединение невозможно, поскольку оба пункта уже входят в состав кольцевого маршрута №1 – 0-5-8-3-0, а объединять можно пункты только из разных маршрутов. Таким образом, констатируем нарушение условия 1 и переходим к следующей итерации.

 Итерация 4.

  • К кольцевому маршруту № 1 – 0-5-8-3-0 (750 шт.) присоединяем радиальный маршрут 0-12-0 (150 шт.). При этом пункт 12 присоединяем к пункту 3, в результате чего получаем новую структуру кольцевого маршрута 0-5-8-3-12-0 (1300 шт.). Суммарный пробег автотранспорта сокращается на 14,6 км.

 Итерация 5.

  • Пункты 12 и 8 не объединяем, поскольку они уже входят в состав кольцевого маршрута 1 (нарушается условие 1).

 Итерация 6.

  • Объединяем два радиальных маршрута:  0-1-0 (450 шт.)  и 0-11-0 (475 шт.) в общий кольцевой маршрут (под № 2) 0-11-1-0 (925 шт.). При этом суммарный пробег автотранспорта сокращается на 13,4 км.

 Итерация 7.

  • Пункты 3 и 6 нельзя объединить по причине нарушения условия 2. Пункт 3 входит в состав кольцевого маршрута 1, и в этом маршруте он занимает «промежуточное» положение, то есть он связан с пунктами 8 и 12: 0-5-8-3-12-0. Радиальный маршрут 0-6-0 можно было бы присоединить к кольцевому маршруту 1 со стороны его «крайних» пунктов – 5 или 12, но к «промежуточным» пунктам 3 и 8 его присоединить нельзя.

 Итерации с 8 по 20

  • Повторяют ту же логику рассуждений, что и в предыдущих 7 итерациях. Отметим только, что на итерациях 9, 11, 12, 16 и 18 объединение не производится только по причине нарушения условия формула7

 Итерации с 21 по 60

  • Уже не имеют смысла, поскольку их выполнение уже не повлечет за собой изменение плана развозки.

 

Суммарный километровый выигрыш за 20 итераций составляет: 

S = 23,0 + 21,4 + 14,6 + 13,4 + 8,8 + 8,3 + 7,9 + 7,8 = 105,3 км 

 а общий пробег автотранспорта, соответственно:  

L1 = L0 – S = 195 –105,3 = 89,7 км

Графически оптимальная схема развозки представлена на рис. 4. Как видно, оптимальная схема развозки включает в себя четыре кольцевых маршрута (вместо первоначальных 12 радиальных маршрутов). Суммарный пробег автотранспорта можно также определить по следующей формуле:

формула8где Li – протяженность i-го маршрута, км; r – количество маршрутов.

 Рассмотрим, например, кольцевой маршрут 0-5-8-3-12-0. Протяженность маршрута определяется по формуле (см. табл. 4):

L1 = d0,12 + d12,3 + d3,8 + d8,5 + d5,0 = 7,3 + 5,1 + 4,1 + 5,4 + 12,0 = 33,9 км.

 Аналогично рассчитываем протяженность остальных маршрутов.

РЕЗУЛЬТАТЫ РЕШЕНИЯ.

Результаты решения задачисведены в таблицу:

Результат решения задачи

 


Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. paybaseme 22 11.02.16 13:14 Сейчас в теме
Спасибо за статью! Информация полезная.

P.s.: оформление так вообще супер :)
2. Lostar 11.02.16 13:25 Сейчас в теме
Этот редкостный упырь переписал нам всю. логистику и теперь мы вообще не представляем, где наши машины))

На самом деле шучу. При помощи механизмов автоматизации Дмитрия наша корпорация сократила расходы на логистику на 17%.

Цель была достигнута за счет отказа от половины буферных складов и внедрения кластерного объединения для оставшихся.

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

Спасибо, Дмитрию, за проделанный труд!
3. mi1man 252 11.02.16 22:59 Сейчас в теме
(2) Lostar, Не каждый день от начальства о себе столько "хорошего" услышишь)) Благодарю Вас Юрий за столь "лестный" отзыв))
4. CSiER 32 12.02.16 08:20 Сейчас в теме
Спасибо за статью - хорошо, что подобные темы затрагиваются на ресурсе.
5. Euroset1 11 13.02.16 02:01 Сейчас в теме
Алгоритм хороший, в целом. Хотя он требует эволюции в какой-то мере:
1) Бывают случаи, когда добить машину под завязку в конечном счете дешевле, чем отдать ту же точку соседней машине из-за ее большей близости. Например, в результате можно сэкономить на количестве машин и как следствие, на ФОТ и на дорогах между складом и первой\последней точками. Намек на апгрейд - учитывать дорогу домой при каждой итерации. Но и этого будет мало, тут надо думать глубже. Возможно даже в ущерб быстродействию комбинировать с перебором, начиная с какой-то стадии.
2) Нагрузка влияет на затраты ГСМ, поэтому можно учитывать некий коэффициент в зависимости от массы между точками. То есть анализировать не голый километраж, а с учетом нагрузки. Иногда полезно сначала сбросить пол кузова, чем сэкономить километр доставляя более легкий груз первым.
3) Тут не учитывается возможность каждой точки выдавать грузы. Возможно, данной фирме это и не нужно. Но в общем случае грузы могут располагаться на любой точке. Иногда предварительная переброска на другой распределительный склад обходится дешевле, чем везти груз сразу до конечной точки. А это уже взаимодействие транспорта и требует подстраивать еще и время в пути...

Но в целом, даже такой алгоритм должен хорошо проявить себя в качестве экономки.
6. mi1man 252 13.02.16 18:39 Сейчас в теме
(5) Euroset1, Спасибо за такой развернутый отзыв, чувствуется что Вы "глубоко" в этой теме. Что качается реализации пунктов 1 и 2 то это все правильно, но мне кажется что и транспортному логисту все таки нужно поработать головой, а не полагаться целиком на рассчитанные варианты. К тому же существует большая проблема, которая все эти расчеты просто обнуляет. Это запрет движения грузового транспорта по некоторым дорогам (особенно актуально для Москвы), а есть даже ограничения до 2,5 тонн (в спальных районах) и есть утвержденные дороги по которым должен двигаться грузовой транспорт .. а по п.3 - как раз сейчас работаю над реализацией "кросс-докинга" (нужно учитывать и планировать перемещение товаров со склада в конечную точку с разгрузкой в промежуточной точке)
7. Euroset1 11 13.02.16 21:16 Сейчас в теме
(6) так я же не говорил, что расчет расстояния по координатам является правильным. Если деятельность сильно завязана на логистике и это приносит деньги, то стоит задуматься о ведении расстояний между пунктами с учетом реальных возможностей транспорта. Изначально координаты являются заплаткой в силу того, что дороги не соединяют точки напрямую. Поэтому для полноценной эволюции придется затеять нагруженный граф расстояний между каждой парой точек. А чтобы не выполнять лишних действий по администрированию этого графа, требования к его пополнению алгоритм должен выдавать сам непосредственно при нехватки данных. То есть он должен вычислить все непроставленные пары, запросить под каждую из них расстояния в обе стороны (одностороннее движение может существенно влиять) и лишь тогда провести работу по подбору маршрутов. При этом со временем вопросов о расстоянии будет все меньше и меньше.
Помимо расстояния можно также ввести градацию загрузки дорог между точками, ака пробки. То есть коэффициент, который помножает расход ГСМ за счет простоя.

Либо можно пойти другим путем. Научиться тырить карты с гугла или яндекса и рассчитывать расстояния и загруженность по ним. Возможно там даже есть АПИ, о котором я просто не в курсе. Это более оптимально, но вселяет существенную зависимость от чужих сервисов (накрылся гугл - ваши машини стоят). А вот если сделать гибрид между этими двумя методами, то система будет аварийно устойчива.

Признаюсь честно в своих сомнениях по поводу "логист должен сам принимать решения". Алгоритмы подобного рода довольно сложны для корректировки. Пытаясь скорректировать предложенные маршруты можно одним неверным действием перечеркнуть всю выгоду. Здесь пройдена та грань, где можно комбинировать человека с программой. На этой стадии остается только улучшать программу. Коробка-автомат =)
8. mi1man 252 13.02.16 23:02 Сейчас в теме
(7) Euroset1, Вы коснулись очень важной темы. Считать геометрическое расстояние между точками на карте и на его основе строить маршрут, в реальной жизни может получится совсем плохой результат, если например точки разделяет река(каналы). Поэтому матрицу расстояний лучше всего заполнять реальным пробегом по дороге между точками, а еще лучше - временем прохождения (так будут учитываться пробки). Возможно я ошибаюсь, но предложенный Вами граф(ы) расстояний это по сути - матрица расстояний и километровых выигрышей (описанная в этом алгоритме).
Матрицу расстояний с указанием длительности и расстояния для всех пар из точек маршрута можно получить используя api Google (для Yandex такого аналога я не нашел), только за это нужно будет им платить.
Насчет Ваших сомнений о логисте, это зря .. людям надо доверять)) до тех пор пока они не подведут. Эта статья была написана для рекламы обработки (она в конце статьи указана), которая позволяет логисту достаточно просто корректировать рассчитанный маршрут, используя его знания (в том числе и для ситуаций, описанных Вами в пп.1,2 предыдущего поста) и как раз реализует комбинирование человека и программы, то что Вы "отрицаете" как оптимальный вариант))
9. rsergio 81 17.02.16 10:58 Сейчас в теме
Давно использую данный метод, но не как конечный вариант решения задачи, а как первый приближенный т.к. по времени расчет производится почти мгновенно.
Получив первый вариант решение дальше оптимизация производится другими алгоритмами перебора, которые более точнее находят оптимальное решение с учетом всех факторов (время доставки, стоимость километра и часа пути и т.д.)

Касаемо вопроса расстояний между точками - я использую три метода:
1) Через API Яндекса
2) Через API Openstreetmap
3) Расчет прямого расстояния по GPS координатам

API Яндекса работает быстрее всего т.к. обрабатывает сразу все запросы и выдает результат порциями. Но есть ограничение - не более 2000 запросов в день.
Поэтому резервный канал - OSM. Работает дольше т.к. каждый запрос обрабатывается отдельно.
В некоторых случаях (очень удаленные точки) проще посчитать прямое расстояние по формуле.
Естественно все данные кэшируются и обновляются с определенной периодичностью.

Пока только не удалось прикрутить актуальные пробки на нужный час т.к. Яндекс позволяет учитывать только пробки на текущий момент.
10. mi1man 252 17.02.16 11:58 Сейчас в теме
(9) rsergio, похоже что и мне предстоит также действовать)
11. DAlik 26.02.16 18:50 Сейчас в теме
Спасибо за статью.
Тоже сделал недавно на 1С своего Кларка-Райта.
Сейчас научился учитывать временные окна, плюс сделал модификацию целевой функции. Целесообразно увеличивать выигрыш для заказов с весом выше среднего. Т.е. алгоритму тем ценнее взяться за заказ, чем выше его вес среди прочих. Такую же поправку сделал и для окон. Т.е. тем ценнее взяться за заказ первым, чем уже его временное окно доставки. В жизни логист так и рассуждает, часто в ущерб километрового выигрыша. Т.е. строит рейсы в первую очередь к клиентам с наиболее узкими окнами и с наибольшим весом на выгрузке.
Сейчас остановился на подборе оптимального транспортного средства среди имеющегося в парке. Как вы справляетесь с этим? Если например в компании узким местом является парк. В процессе работы Кларка-Райта нужно уметь учитывать различные ограничения по машинам: совместимость груза с типом транспортных средств (рефы, изотермы), время доступности машины (актуально для кругорейсов), признак собственный\наемный и.т.д.
Соглашусь с rsergio, возможно мне тоже стоит перейти к двухфазным методам т.е. оптимизировать рейсы после приближенного решения Кларком-Райта.
12. mi1man 252 02.03.16 18:01 Сейчас в теме
(11) DAlik, Спасибо за отзыв. Сразу не увидел заданного вопроса). В нашей компании нет проблемы с различной грузоподъемностью (только фуры), поэтому и не было ранее задачи учитывать таковую. Однако многие мои клиенты выразили пожелание, чтобы программа умела работать с временными окнами доставки и транспортом различной грузоподъемности. Сейчас как раз работаю над реализацией такого функционала .. будет использоваться усовершенствованный эвристическими методами генетический алгоритм с модифицированными проблемно-ориентированными операторами .. о какое крутое название получилось)) .. возможно потом напишу статью об этом методе.
20. oldgabber0 10.07.19 12:58 Сейчас в теме
(12) От офиса до столовой мне ехать 80 метров, а от столовой до офиса 950 потому что "кирпич".
Средствами апи осм, яндекса и гугла можно получать расстояние между пунктами в километрах по дороге, и они порой осознают наличие знаков вроде "односторонее движение".

Я правильно понимаю, что метод не может учитывать то, что можно ездить в обе стороны?
На первом шаге мы посчитали, что ехать из 8 в 3 лучше всего, но на деле может быть из 3 в 8 еще лучше?

ну и второй вопрос - удалось ли прикрутить к кларку-райту временные окна и будет ли об этом статься?
21. mi1man 252 10.07.19 13:36 Сейчас в теме
(20)
Я правильно понимаю, что метод не может учитывать то, что можно ездить в обе стороны?
На первом шаге мы посчитали, что ехать из 8 в 3 лучше всего, но на деле может быть из 3 в 8 еще лучше?


метод работает с матрицей расстояний в которой расстояния А-Б равно Б-А, поэтому оба направления движения равны, другой вопрос что есть "лучшее" направление, т.к первый пункт доставки ближе и значит быстрее будет разгружаться транспорт по маршруту


(20)
ну и второй вопрос - удалось ли прикрутить к кларку-райту временные окна и будет ли об этом статься?


прикрутить удалось [Простые маршруты] Временные окна
13. saksaul 01.12.16 04:47 Сейчас в теме
афтар вы хоть укажите что не сами писали, сделайте ссылку на первоисточник, как сделали люди на этом сайте http://jurisprudent.site/ekonomicheskaya-teoriya/312-metod-klarka-52262.html
14. mi1man 252 01.12.16 11:03 Сейчас в теме
(13) чудак (не стану ошибаться в этом слове) .. в каком месте ты увидел, что это я придумал этот метод .. прочитай еще раз его название .. эта статья написана только для того чтобы показать (в деталях) как этот метод работает в программе "Простые маршруты" (http://infostart.ru/public/452803/)
15. корум 285 01.12.16 11:06 Сейчас в теме
(14)
в каком месте ты увидел, что это я придумал этот метод

он про то, что описание метода и картинки типа с учебника скопипастили.
16. mi1man 252 01.12.16 11:29 Сейчас в теме
(15) тогда чудак выглядит еще глупее, с чего он решил что по его ссылке находится правильное описание, он даже не вникал в его суть, т.к в статье по его ссылке приведен ход и описание алгоритма с грубыми опечатками .. это видно хотя бы по приведенным результатам.
17. user736465 18.04.17 13:22 Сейчас в теме
(16)
Нет ли у вас JAVA кода решения методом Метод Кларка-Райта.
А именно код, который бы генерил матрицу километровых выигрышей и определял максимально удобный путь
18. mi1man 252 18.04.17 13:36 Сейчас в теме
19. пользователь 13.10.17 13:32
Сообщение было скрыто модератором.
...
22. MichaelCH 13.05.21 08:32 Сейчас в теме
На рисунках 1, 2 и 4 точки 3 и 5 перепутаны местами. Поэтому решение на рисунке 4 выглядит не совсем оптимальным, в маршруте 0-5-8-3-12-0, при этом данный маршрут является оптимальным, но не выглядит таким.

Спасибо за статью, метод интересный и быстрый. Реализовал на VBA, решает достаточно быстро.
Для поиска более оптимального решения можно на базе полученных маршрутов их еще улучшить (запустить коммивояжера для каждого из маршрутов использую матрицу расстояний, в т.ч. не симметричную и другие оптимизации).
23. mi1man 252 14.05.21 13:11 Сейчас в теме
Действительно перепутал .. спасибо за подсказку)
Оставьте свое сообщение

См. также

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С Промо

Математика и алгоритмы Практика программирования v8 v8::blocking 1cv8.cf Бесплатно (free)

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    45243    ids79    46    

Что за ? в коде, или Секретный оператор в 1С

Математика и алгоритмы v8 Платформа 1C v8.2 Платформа 1С v8.1 1cv8.cf Бесплатно (free)

Инкремент, модуль и прочая магия, которая скрыта под символом "?"

21.10.2021    8653    SeiOkami    41    

Интересная задача на Yandex cup 2021

Математика и алгоритмы Бесплатно (free)

Мое решение задачи на Yandex cup 2021 (frontend). Лабиринт. JavaScript.

12.10.2021    3794    John_d    71    

Механизм анализа данных. Кластеризация.

Математика и алгоритмы Анализ учета v8 v8::DataMining Бесплатно (free)

Подробный разбор, с примером использования, встроенного механизма кластеризации 1С.

31.08.2021    2170    dusha0020    8    

Как работает серверный вызов в 1С Промо

Математика и алгоритмы v8::УФ Бесплатно (free)

Клиент-серверная архитектура заложена в платформе изначально — со времен «1С:Предприятие 8.0». Однако при разработке на 8.0 и 8.1 о разделении кода на клиентскую и серверную часть можно было не заботиться, поскольку на клиенте (на толстом клиенте) был доступен тот же функционал, что и на сервере. Всё изменилось с выходом платформы «1С:Предприятие 8.2», когда появился тонкий клиент. Теперь на клиенте доступен один функционал, на сервере — другой. Клиент и сервер «общаются» между собой с помощью серверного вызова. Конечно, это усложнило процесс разработки, но с другой стороны – можно создавать более оптимальные (быстрые) решения, поскольку все сложные задачи выполняются на сервере.

18.11.2017    67871    pahich    84    

Алгоритмы распределения сумм (наивная методика, Алгоритм Кэхэна)

Математика и алгоритмы Россия Бесплатно (free)

Многим встречалась задача распределения суммы и вытекающая из нее проблема округления, каждый решал ее по-своему, все ли способы вам известны?

08.07.2021    2813    con-men    31    

Распределенные алгоритмы РИБ 1С

Распределенная БД (УРИБ, УРБД) Математика и алгоритмы v8 Бесплатно (free)

Небольшое исследование на тему применимости классических распределённых алгоритмов репликации и синхронизации данных между узлами обмена РИБ 1С.

02.07.2021    1279    zhichkin    1    

Чем воспользоваться для распознавания котиков в 1С?

Математика и алгоритмы Практика программирования v8 Бесплатно (free)

На митапе по инструментам для расширения возможностей 1С выступил Олег Филиппов. Он сравнил подходы Native API, COM, Docker и Serverless, и рассказал, как упростить использование в 1С алгоритмов, реализованных на других языках, с помощью облачной технологии «Функция как сервис».

12.04.2021    3473    comol    10    

Будни автоматизации или "мне нужна программка для 3D упаковки" Промо

Математика и алгоритмы Оптовая торговля Оптовая торговля Практика программирования v8 1cv8.cf УУ Бесплатно (free)

Автоматизация отечественных предприятий, которой приходиться заниматься, это нужная и высокооплачиваемая, но довольно нервная работа. Выручает юмор. Например, при общении с требовательным клиентом можно вспомнить анекдот: "Держась руками за стену, на ногах еле стоит мужик. К нему пристает ребенок: "Ну, папа, пожалуйста, сделай мне кораблик!", папа отвечает: "Ага! - Сейчас все брошу и пойду делать тебе кораблик!". Про один такой сделанный для клиента "кораблик" и хочется рассказать. Надеюсь, совместное погружение в теплое ламповое (то есть клиентоориентированное) программирование доставит Вам положительные эмоции, да и задача попалась интересная. Поплыли?

24.03.2014    46856    ildarovich    117    

Рекурсия для начинающих

Математика и алгоритмы Практика программирования v8 Бесплатно (free)

Рассмотрен подход к пониманию рекурсий. Приведены примеры из реальной практики.

10.02.2021    2681    szv    5    

1С: Документооборот, Data Science и Python

Документооборот и делопроизводство Математика и алгоритмы ДО Бесплатно (free)

В статье рассказывается о создании и обучении модели Data Science на языке Python и интеграции с системой 1С: Документооборот

04.08.2020    3464    Vaganov_Alexey    9    

Применение математических достижений в решении сложных задач бизнеса

Математика и алгоритмы Бесплатно (free)

Как правило, самые сложные задачи решаются с точки зрения математики очень легко. Но чтобы найти правильное решение, важно понять бизнес-цель, которую достигает эта задача. О практическом применении математических достижений для эффективного решения сложных задач бизнеса на конференции Infostart Event 2019 Inception рассказал Дмитрий Мишнов.

25.05.2020    4681    Mishnov    17    

Приемы обработки больших данных в 1С Промо

Универсальные обработки Математика и алгоритмы Перенос данных из 1C8 в 1C8 v8 1cv8.cf Бесплатно (free)

Рассказ об эффективных приемах организации обработок больших объемов данных на платформе 1С

07.08.2015    71461    tormozit    29    

Партионный учет по двум количественным показателям

Математика и алгоритмы Учет ТМЦ v8 1cv8.cf Оптовая торговля, дистрибуция, логистика Россия УУ Бесплатно (free)

Особенности учета партионной системы при наличии двух количественных показателей.

26.03.2020    4537    lastcontra    5    

Улучшение пооперационного планирования в 1С:ERP 2.4 внешними средствами

Математика и алгоритмы HighLoad оптимизация Бесплатно (free)

Задача построения оптимального производственного расписания требует сравнения тысяч и десятков тысяч вариантов. Выполнять такие вычисления средствами платформы 1С Предприятие нецелесообразно. Как реализовать пооперационное планирование с использованием генетических алгоритмов и параллельных вычислений в докладе на конференции Infostart Event 2019 Inception рассказал генеральный директор компании «ИНТЕХ» Сергей Сафаров.

02.03.2020    7126    ildarovich    8    

Получение значений всех полей в иерархии структуры отчета

Математика и алгоритмы Практика программирования v8::СКД Россия Бесплатно (free)

При обработке расшифровки данных в отчете (да и не только отчете), основанном на СКД, может потребоваться получить значения всех полей, находящихся в текущей группировке и её родителях. Представляю вашему вниманию алгоритм, выполняющий эту задачу. Как говорится, "просто оставлю это здесь".

28.02.2020    2563    real_MaxA    1    

XDTO - это просто Промо

Математика и алгоритмы v8 1cv8.cf Бесплатно (free)

С появлением платформы 8.1 фирма “1С” представила механизм, носящий интригующее название XML Data Transfer Objects или, если коротко - XDTO. По традиции, документирование механизма составлял тот, кто хорошо разбирался в вопросе, а стало быть опустил “и так понятные” с его точки зрения моменты. Целью данной статьи (или цикла статей, как получится) стало желание поделиться накопленным опытом. Мне кажется, многие неочевидные вещи в механизме XDTO необходимо осветить получше.

24.12.2012    332114    Evil Beaver    184    

Treemapping — способ визуализации данных древовидной структуры. Карта-схема дерева

Математика и алгоритмы Работа с интерфейсом v8 1cv8.cf Бесплатно (free)

Предлагается ознакомиться с редким способом графического представления иерархических данных. Приводится алгоритм формирования и пример реализации.

18.02.2020    6558    randomus    20    

[После]Новогодние задачи

Математика и алгоритмы Практика программирования v8 Бесплатно (free)

Совсем немного времени осталось до того момента, когда отзвучат куранты, шампанское будет выпито, мандарины съедены, и даже оливье закончится. Возникнет вопрос: чем бы занять неожиданно появившееся свободное время?

30.12.2019    3426    Alxby    23    

Регистры бухгалтерии. Общая информация

Математика и алгоритмы Практика программирования v8 v8::БУ БУ Бесплатно (free)

Общая информация о внутреннем устройстве регистров бухгалтерии.

05.09.2019    47334    YPermitin    25    

Самоучитель языка запросов 1С. Промо

Решение задач на 1С:Специалист Математика и алгоритмы Практика программирования v8 v8::Запросы Бесплатно (free)

Сервис для изучения запросов 1С: "Консоль изучения запросов 1С:Предприятие 8". Теперь и с конструктором запросов!

07.05.2013    115526    bpc222    327    

"Хочу универсально!" [Часть 1]

Математика и алгоритмы Инструментарий разработчика Практика программирования v8 1cv8.cf Бесплатно (free)

Сентябрьская серия статей про то, как начинающий разработчик Вася проходит путь от простой задачки к созданию своего механизма. На этот раз - открытие значения из текущей колонки.

02.09.2019    10736    SeiOkami    35    

Иерархия без "В ИЕРАРХИИ"

Математика и алгоритмы v8 Бесплатно (free)

Говорится о том, как эффективно представлять иерархию в СУБД, как получать и использовать эти представления при решении задач в запросной технике. Уточняются и дополняются запросы из статьи "Уровни, глубина, прародители, циклы и аналоги запросом" [https://infostart.ru/public/160707/].

22.08.2019    15170    ildarovich    24    

EnterpriseData – часть 3. Загрузка данных, идентификация объектов

Математика и алгоритмы Перенос данных из 1C8 в 1C8 Инструментарий разработчика Практика программирования v8 v8::УФ 1cv8.cf Бесплатно (free)

Основные этапы загрузки данных через EnterpriseData. Идентификация объектов загружаемых полностью и по ссылке. Приведены схемы процессов загрузки данных. Описание основных операций и обработчиков. Перечень процедур БСП, используемых при загрузке данных, структура «КомпонентыОбмена».

22.08.2019    18825    ids79    8    

Предметно-ориентированное проектирование (3D) в 1С. Виртуальная машина. Промо

Математика и алгоритмы Бесплатно (free)

Проектирование программного обеспечения - это постоянная битва за простоту.

03.06.2014    41456    Evgen.Ponomarenko    91    

Запрос SQL для нахождения самого большого простого числа меньше заданного

Математика и алгоритмы Бесплатно (free)

Данный запрос MS SQL демонстрирует некоторые возможности MS SQL Server, о которых часто неизвестно большинству программистов 1С. В тексте постараюсь объяснить интерес данного запроса (или скрипта).

16.08.2019    2307    alex_bitti    18    

Обработчики событий при записи объектов. Зачем и что за чем?

Математика и алгоритмы v8 Бесплатно (free)

Программисту, имеющему немного опыта на платформе 1С 8.3, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта.... Эта шпаргалка была создана в процессе обучения и реального опыта с целью разложить всё по полочкам, чтобы было четкое понимание в каком случае какой обработчик нужно использовать и в какой последовательности они запускаются при записи и проведении документов. Данная статья будет полезна в большей степени начинающим разработчикам. Но и опытным позволит освежить информацию, упорядочить её.

25.07.2019    115166    AlbinaAAA    49    

Как проводятся документы в типовых конфигурациях от 1С

Математика и алгоритмы Инструментарий разработчика Практика программирования v8::ОУ ERP2 УТ11 Россия УУ Бесплатно (free)

В свое время, когда только начинал шаги в 1С и изучал, как проводятся документы в конфигурациях на платформе 1С по книге "Разработка управляемого интерфейса" (Хрусталева Е.Ю.), и там были представлены примеры совсем далекие от того, как сейчас проводятся документы в современных конфигурациях от 1С.

24.07.2019    36968    skv_79    37    

Решение транспортной задачи запросом Промо

Математика и алгоритмы v8 Бесплатно (free)

Списание по двум последовательностям партий запросом (без программной обработки)

1 стартмани

30.04.2014    36109    bforce    22    

FizzBuzz на 1С. Чем короче, тем веселее. Варианты принимаются...

Математика и алгоритмы Практика программирования v8 Бесплатно (free)

Мне было скучно, я не мог себя заставить написать ничего полезного. И читал статью на Хабре. Потом я читал комментарии, а потом... нет я не ушел смотреть котиков на ютюбе. Я решил сделать несколько решений задачки FizzBuzz на 1С, с целью "чем короче, тем лучше". Прошу сильно не пинать, это просто развлечение для вечера.

24.07.2019    6072    vandalsvq    19    

Управление качеством кода

Математика и алгоритмы Рефакторинг и качество кода SonarQube EDT v8 Бесплатно (free)

О SonarQube, АПК, EDT. Какие преимущества дает их использование. Для каких команд подходит.

22.07.2019    19640    Stepa86    40    

Что делает "В ИЕРАРХИИ" в запросе?

Математика и алгоритмы v8 Бесплатно (free)

Описание действий платформы 1С при использовании конструкции "В ИЕРАРХИИ" в запросах.

16.07.2019    47738    YPermitin    34    

Парсер запросов 1С. Часть 1: Введение, разбор математических выражений Промо

Математика и алгоритмы v8 Бесплатно (free)

Рано или поздно становится скучно решать типичные задачи, для которых придумана 1С. Голова пухнет от бухгалтерских терминов и очередных "хотелок" пользователей. Именно в такие моменты хочется гордо поднять голову, воскликнуть "Но я же программист!" и заняться чем-то интересным. В цикле статей я постараюсь доступно описать, как устроены парсеры в целом и на примере парсера языка запросов 1С. Требования к навыкам читающего: основы языка 1С, основы алгоритмизации.

1 стартмани

04.12.2013    31311    juntatalor    49    

Создание отчетов с помощью СКД - основные понятия и элементы

Математика и алгоритмы v8 v8::СКД Бесплатно (free)

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    77133    ids79    28    

Реализуем Стек, Очередь и Приоритетную очередь в 1С

Математика и алгоритмы Практика программирования v8 1cv8.cf Россия Бесплатно (free)

В статье рассматриваются способы реализации таких абстрактных структур данных, как стек, очередь и приоритетная очередь, используя готовые типы данных 1С. Выявляются "узкие" места, сложные моменты в реализации и сравнивается скорость работы.

24.06.2019    16528    RonX01    66    

Почему вообще работает мой запрос? или Ещё раз о планах запросов

Математика и алгоритмы Инструментарий разработчика Практика программирования v8::Запросы Бесплатно (free)

Другие статьи на эту тему объясняют, что такое план выполнения запроса, но не рассказывают о том, как его получить. Эта заметка призвана заполнить этот пробел. Её цель - популяризировать общедоступные инструменты получения плана запроса среди разработчиков, которые ещё не начали их использовать.

10.06.2019    10304    DataReducer    12    

Сервис для изучения методов платформы 1С:Предприятие 8. Бесплатно! Промо

Решение задач на 1С:Специалист Математика и алгоритмы v8 Бесплатно (free)

Бесплатный ON-Line сервис изучения методов платформы 1С:Предприятие 8. Подготовка к аттестации 1С:Специалист on-line! Тестовые задания по различным видам учета! Подсказки для оптимального решения!

27.06.2013    51328    bpc222    54    

Вычисление 200 тысяч знаков числа pi

Математика и алгоритмы v8 Россия Бесплатно (free)

В статье рассматриваются возможности платформы выполнять сверхточные вычисления без использования сложных алгоритмов и внешних компонент на примере вычисления числа pi.

28.05.2019    9375    Oleg_nsk    97    

Регистры накопления. Виртуальные таблицы. Часть №1: Обороты

Математика и алгоритмы Инструментарий разработчика Практика программирования v8 1cv8.cf Бесплатно (free)

Описание работы платформы 1С:Предприятие 8.2 с виртуальной таблицей "Обороты" регистров накопления.

20.05.2019    46852    YPermitin    8    

Выдержки из книги Чистый код

Математика и алгоритмы Бесплатно (free)

Недавно я прочитал книгу "Чистый код" Роберта Мартина (Robert Cecil Martin). В ней описываются принципы организации и форматирование исходного кода программы так, чтобы в дальнейшем было легко поддерживать такой код. Эта книга является библией для многих программистов, но вот в среде программистов 1С, к сожалению, не очень распространено чтение подобной фундаментальной литературы. Книга более 400 страниц и так много порой лениво читать, да и времени всегда не хватает. По этому я решил выделить в виде цитирования по разделам самые важные моменты. А также снабдил текст своими примерами кода.

16.05.2019    14294    FreeArcher    108    

Внутреннее качество разработки конфигураций 1С Промо

Математика и алгоритмы Практика программирования Бесплатно (free)

Пиши с верой в то, что твой читатель - это маньяк с дробовиком, знающий твой домашний адрес. Размышления на тему внутреннего качества кода при разработке/доработках конфигураций 1С.

21.06.2013    38560    ig1082    50    

Даем названия переменным: как префиксы экономят наше время

Математика и алгоритмы Инструментарий разработчика Практика программирования v8 Бесплатно (free)

Понятные названия переменных экономят время и силы разработчика : в начале, когда мы даём названия переменным, в процессе развития разработки, когда мы "на лету" понимаем назначение той или иной переменной, в конце, когда мы передаём разработку на поддержку других программистов, сами переходя к новым разработкам

06.05.2019    9135    Designer1C    81    

Что такое алгоритм?

Математика и алгоритмы Бесплатно (free)

Как ответить на этот вопрос и не попасть пальцем в небо.

25.02.2019    16870    mkalimulin    274    

Криптовалюты, а также иные взгляды на природу денег в терминах 1С

Математика и алгоритмы Бесплатно (free)

Это отчасти полемическая статья. Я задумал написать ее как ответ на другую хорошую статью о криптовалютах. Хотелось поспорить с некоторыми утверждениями автора, а ещё больше с некоторыми комментариями. А чтобы текст был более понятным для местной аудитории, я решил использовать, где только возможно, терминологию и практику 1С.

28.01.2019    6482    mkalimulin    89    

v8: Концепция минимального изменения конфигурации для легкого обновления Промо

Математика и алгоритмы v8 1cv8.cf Бесплатно (free)

"Лучше день потерять потом за пять минут долететь" ((с) "Крылья, ноги и хвосты") или как сделать так чтобы обновление конфигурации проходило с минимальными трудозатратами.

28.01.2013    38791    MarSeN    57    

Как писать код? Технологии древних цивилизаций, или все новое - это хорошо забытое старое

Математика и алгоритмы Бесплатно (free)

Все современные технологии - это развитие и доведение до ума (или маразма) древних идей. За последнее время не придумали ничего нового - все, что мы видим, было придумано тысячи лет назад. Не является исключением и программирование, которое в сути своей является переводом с языка условностей технического задания или заявки пользователя в формализованный и абсолютно точный язык математической логики. А логику придумали (по крайней мере первыми опубликовались в ведущих научных журналах) еще древние греки.

23.01.2019    12131    starik-2005    43    

Заметки по SQL: Срез последних - аналог запроса

Математика и алгоритмы Практика программирования v8 1cv8.cf Россия Бесплатно (free)

В статье описывается создание среза последних данных средствами классического языка запросов. Причем метод построения запроса был разработан еще во времена, когда автор работал с СУБД Oracle 9i и программировал на PL SQL. Основная идея заключается преобразовании запроса с подзапросом, в запрос без подзапроса (в примерах описывается преобразование до двух вложенных подзапросов). Запросы тестировались на реальных базах данных. Платформа - 1С:Предприятие 8.3 (8.3.10.2561).

15.01.2019    14507    IVC_goal    16    

Роберт Мартин: "Будущее программирования" / Robert Martin: "The Future of Programming"

Математика и алгоритмы Блоги Бесплатно (free)

Перевод-транскрибация выступления.

14.01.2019    17459    Vladimir Litvinenko    38    

Алгоритм ведения дебиторской задолженности(Часть 1) Промо

Математика и алгоритмы Взаиморасчеты Взаиморасчеты БУ Бесплатно (free)

Алгоритм построения дебеторской задолженности с привязкой отгрузки и оплат

29.11.2012    20249    anterehin    15    

Многоязычное программирование: создание систем с использованием нескольких языков

Математика и алгоритмы Россия Бесплатно (free)

В мире существует несколько тысяч языков программирования. Несмотря на то, что многие из них крайне непопулярны, очень специфичны или уже созданы очень давно, они продолжают существовать, а новые языки продолжают появляться. Похоже, нет оснований полагать, что количество языков когда-нибудь начнет уменьшаться и в конечном счете будет создан один универсальный язык программирования. Большое количество языков может пугать своей необъятностью, но новое понимание идеи многоязычных проектов позволяет не только ориентироваться в этом разнообразии, но и видеть очевидную выгоду для всех.

09.01.2019    17787    kalyaka    36    

Размышления о хороших практиках, навеянные одной статьей

Математика и алгоритмы Бесплатно (free)

Прочитал статью "Ректальное программирование: основы для практикующих 1С-программистов". Статья очень хорошая и своевременная. Но у меня возникло некоторое сомнение. А достаточно ли автор любит и понимает предмет, о котором пишет? Насколько богат его опыт ректального программирования и занимался ли он им вообще? Как человек обладающий многолетним опытом РП, я решил представить вам необходимые дополнения к статье.

21.12.2018    7078    mkalimulin    61    

Ректальное программирование: основы для практикующих 1С-программистов

Математика и алгоритмы Бесплатно (free)

Одной из самых популярных и зарекомендовавших себя методологий программирования в 1С является так называемое ректальное программирование. Редкий проект внедрения и сопровождения учётных систем на платформе 1С обходится без его использования. Зачастую без знания данной методологии программистам даже бывает сложно найти работу в сфере 1С, потому что работодатели, особенно фирмы-франчайзи, в основном отдают предпочтение классическим, зарекомендовавшим себя методикам, а не новомодным заграничным веяниям.

19.12.2018    50279    for_sale    355