Решение задачи планирования доставки и возврата грузов 1 Sql запросом
WITH RECURSIVE fibonacchi AS (
SELECT
1 AS index,
0 AS last_value,
1 AS now_value
UNION
SELECT
index + 1 AS index,
now_value AS last_value,
now_value + last_value AS now_value
FROM fibonacchi
WHERE index < 15
)
SELECT now_value FROM fibonacchi;
Немного усложним пример. Возмем квадрат х, у со сторонами в 1000 км. Рандомно набросайте туда 2000 точек 2 типов jit ( jast in time ) на доставку груза со склада на точку ) и ral ( return after lease ) на возврат груза с точки на склад ( поровну ). Разместите на квадрате еще рандомно точки 3 складов. Каждой грузу-точке дайте рандомно дату крайней обработки ( доставки или возврата ) от Начальной до + 60 дней.
Возьмите среднюю скорость авто в 50 км/ч. Вместимость авто 4 груза максимум. Рабочая смена авто 11 часов. Авто ночуют в своих гаражах. Авто в гаражах много. Все грузы есть на всех складах. Любой склад готов принять любые грузы в любом количестве при их возврате.
Эвристика алгоритма для рекурсии следующая. Надо забрать все грузы ral и доставить все грузы jit на авто с ближайшего склада, которые обязательны на день планирования. Сначала доставляем или забираем. На обратном пути берем ближние попутные грузы более поздних дат, что бы успеть вернуться в гараж не превышая время в пути 11 часов.
Запрос должен вернуть точки рейсов ( склад, груз ...груз, склад ) с временем их посещения.
Кому сделать такой запрос не сложно и интересно, предложу для решения набор реальных правил составления плана для производственной компании