Вы правы, что эта формулировка потребует целочисленных переменных.Традиционный способ решения такой проблемы состоит в том, чтобы сформулировать модель двоичной переменной и передать ее в решатель.В этом случае MATLAB не будет работать, если у вас нет доступа к панели инструментов оптимизации.
http://www.mathworks.com/products/optimization/index.html
В вашей формулировке вам необходимо учесть следующее:
Переменные решения
В вашем случае это будет выглядеть примерно так:
x_it (выберите [да = 1 нет = 0] для перевозки предмета i во время поездки на лодке номер t)
Цель Функция
Я не совсем уверен, откуда этоваше описание, но должна быть стоимость, c_t, связанная с каждой поездкой на лодке.Если вы хотите минимизировать общее время, каждая поездка будет иметь постоянную стоимость 1. Поэтому ваша цель должна выглядеть примерно так:
минимизировать SUM ((i, t), c_t * x_it) (так что вы минимизируетеобщая стоимость за все поездки)
Ограничения
Это сложная часть вашей проблемы.Сложным ограничением является исключительность, которую вы определили.Помните, что x_it является двоичным.
Для каждой пары элементов (i1, i2), которые конфликтуют друг с другом, у вас есть ограничение, которое выглядит следующим образом:
x_ (i1 t) + x_ (i2t) <= 1 </p>
Например:
x _ ("капуста" "1") + x _ ("козел" "1") <= 1 </p>
x_ ("волк" "1") + x _ ("коза" "1") <= 1 </p>
x _ ("капуста" "2") + x _ ("коза" "2") <= 1 </p>
x _ ("волк" "2") + x _ ("козел" "2") <= 1 </p>
т. Д.
Вы видите, как это предотвращает конфликт.Расписание лодок, которое назначает «капусту» и «козу» одной и той же поездке, нарушит это двоичное ограничение эксклюзивности, поскольку «1 + 1> 1»
Такие инструменты, как GAMS, AMPL и GLPK, позволят вам выразить эту группуиз ограничений очень кратко.
Надеюсь, это поможет.