Проблема сетевого потока с бинарным в AMPL? - PullRequest
0 голосов
/ 20 января 2020

это модель AMPL, я довольно новичок в этом, поэтому я занимаюсь классической проблемой логистики, проблемой сетевого потока, где я должен найти самый дешевый способ транспортировки доступных донорских крови в net городов, где по краям разные расходы. Поэтому я должен минимизировать его целевую функцию (возможно, лучше понять чтение кода). Я решаю проблему прямо сейчас, но теперь передо мной стоит вторая задача, где фиксированная стоимость, равная 10, должна быть заплачена за каждое преимущество, используемое для транспортировки донорской крови (в дополнение к стоимости доставки). Насколько я понял, вопрос прост. На практике мне просто нужно добавить 10 * numberOfEdgeUsed к целевой функции. Я хочу сделать это правильно, пытаясь добавить двоичную переменную для каждого ребра, 1, если ребро используется, 0, если нет. Я довольно новичок в такого рода программировании, и я не знаю, как это сделать. Любая помощь приветствуется. Я положил только код .mod, я не помещаю файл .dat, потому что это не нужно. Это код первой задачи, я должен изменить это:

установить города;

установить начало в (города);

установить назначение в (города);

установить связь внутри (города пересекают города);

param Costs {ссылка};

param DemSup {Cities};

param fixedCost {(i) , j) в Link} = 10;

var y {Link}, двоичный файл;

var Ship {Link}> = 0, <= 1000; </p>

свести к минимуму Total_Cost : сумма {(i, j) в соединении} fixedCost [i, j] * y [i, j] + сумма {(i, j) в соединении} (затраты [i, j] * доставка [i, j]) ;

в зависимости от поставки {i in Origins}: - сумма {(i, k) в ссылке} Ship [i, k]> = DemSup [i];

в зависимости от спроса { i в пунктах назначения}: сумма {(j, i) в ссылке} Ship [j, i] - сумма {(i, k) в ссылке} Ship [i, k] == DemSup [i];

1 Ответ

0 голосов
/ 21 января 2020

Вам необходимо добавить следствие: если y = 0, то соответствующая ссылка не может быть использована. Это можно сформулировать как ограничение:

 Ship[i,j] <= 1000 * y[i,j] 

(или лучше Ship[i,j] <= Ship[i,j].ub * y[i,j])

...