Проблема секционирования и комбинаторики для парных ордеров на основе определенных ограничений c - PullRequest
0 голосов
/ 03 февраля 2020

Привет всем! Я уже некоторое время сталкиваюсь с некоторыми проблемами, связанными со следующей проблемой: У меня есть список tileOrders, в каждом заказе есть следующие поля: -tileLenght, -tileWidth, -numberOfTiles

Я должен найти наиболее эффективный способ сопоставления этих Орденов (единичный Орден, пара Орденов или набор из 3-х Орденов) в продольном направлении, чтобы сумма их ширин не превышала определенного значения, скажем, R и не меньше R * 0,9. Также необходимо учитывать количество плиток и их длину, поскольку соответствующая комбинация должна иметь приблизительно равное количество линейных метров (tileLenght * numberOfTiles); Для более интуитивного понимания проверьте эскиз ниже:

Начало эскиза

Конец эскиза

Предполагаемый оптимальный результат будет 29, 27, 17, оставляя нам самый короткий заказ (красный), полностью связанный с частями, образующими другие 2 (синий и зеленый), остальные 2 будут созданы как частичные заказы, которые затем используются в других последующих комбинациях с другими заказами. или подзаказы; Это также подразумевает, что существует вероятность того, что некоторые заказы будут отсоединены, пока не будут добавлены новые заказы, соответствующие условиям. Также существует возможность, что вы можете go выше или ниже 10% от значения numberOfTiles для точной настройки результата. У нас также есть минимальная длина комбинации, скажем, L, так что у вас не может быть заказов в комбинации значение линейных метров которого меньше L; (по крайней мере, мне это трудно)

То, что мне удалось сделать sh: создать комбинации заказов, соответствующие условие: (R * 0,9 <= сумма ширин в комбинации <= R) </p>

Проблема в том, чтобы найти оптимальное решение и управлять подзадачами. (Может быть, какой-то тип алгоритма жадности или обратного хода поможет мне, но я Я не настолько разбираюсь в алгоритмах такого типа)

Это скорее проблема алгоритми c, поэтому любой язык, даже естественный, подходит, если у вас есть предложения / решения. Также код написан на java если есть запросы;

Спасибо, что нашли время, чтобы прочитать это.

...