AMPL将最小最大约束添加到集合中的项目

问题描述 投票:0回答:1

我最近在一个班级中被介绍给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];
  1. 在我的数据文件中:

    参数:GENS:GenerationMin GenerationMax:=#定义集合“ GENS”和参数“ Generation”

    GEN1 10 90

    GEN2 10 100

    GEN3 5 85;

[我们只曾遇到过需求量产生问题的问题,但是没有遇到最小,最大量以及需求量==供应量的问题。在Ampl 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;

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
optimization linear-programming ampl
1个回答
1
投票

正确的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

© www.soinside.com 2019 - 2024. All rights reserved.