AMPL добавление минимальных максимальных ограничений к элементам в наборе - PullRequest
0 голосов
/ 09 октября 2019

Недавно я познакомился с AMPL в классе, и в настоящее время я работаю над проблемой оптимизации, которая требует от меня найти минимальные затраты для требуемых требований. Фактические строки, о которых я говорю, следующие: 1. Это в моем файле модели:

minimize Total_Cost:
sum{i in GENS, j in LOADS} cost[i,j] * Allocate[i,j];

subject to GenConst {i in GENS}:
sum {j in LOADS} Allocate[i,j] <= Generation[i];

subject to DemConst {j in LOADS}:
sum {i in GENS} Allocate [i,j] >= Demand[j];

в моем файле данных:

param: GENS: GenerationMin GenerationMax: = #defines set "GENS" и параметр "Generation"

GEN1 10 90

GEN2 10 100

GEN3 5 85;

Мы когда-либо работали только с проблемами, когда наше требование = генерация, но ни с одним из них не было минимума, максимума и спроса. ! = поставка. Я получаю следующую ошибку при запуске моего файла данных в amp GenerationMin is not a subscripted param. При запуске этого скрипта только с максимальным значением он работает нормально. Проблема, и я только догадываюсь, с линиями выше. Может кто-нибудь объяснить мне, где я иду не так и как решить эту проблему?

РЕДАКТИРОВАТЬ: Я могу включить весь свой код, хотя в случае, если кто-то хочет воспроизвести проблему. .mod файл:

set GENS;
set LOADS;

param Generation {GENS} >=0;
param Demand {LOADS} >=0;
param cost {GENS, LOADS} >= 0;

var Allocate {GENS, LOADS} >= 0; #{GEN1, LOAD1}, {GEN1, LOAD2... etc}

minimize Total_Cost:
sum{i in GENS, j in LOADS} cost[i,j] * Allocate[i,j];

subject to GenConst {i in GENS}:
sum {j in LOADS} Allocate[i,j] <= Generation[i];

subject to DemConst {j in LOADS}:
sum {i in GENS} Allocate [i,j] >= Demand[j];

.data файл:

data;

param: GENS:
GenerationMin GenerationMax := #defines set "GENS" and param "Generation"
GEN1 10 90
GEN2 10 100
GEN3 5 85 ;

param: LOADS: Demand := #Defining set "LOADS" and param "Demand"
Load1 70
Load2 20
Load3 30
Load4 60;

param cost:
Load1 Load2 Load3 Load4 :=
GEN1 39 14 11 14
GEN2 27 9 12 9
GEN3 24 14 17 13;

option solver cplex;
solve;
display Allocate;
display Allocate, Total_Cost > Output.txt

1 Ответ

1 голос
/ 09 октября 2019

Правильный синтаксис AMPL:

set GENS;
param GenerationMin {GENS} >=0; 
param GenerationMax {GENS} >=0;

data;
param: GENS:
GenerationMin GenerationMax :=
GEN1 10 90
GEN2 10 100
GEN3 5 85 ;

display GENS,GenerationMin,GenerationMax;

, т. Е. Используйте GenerationMin,GenerationMax в модели и в разделе данных.

...