【问题标题】:AMPL adding min max constraints to items in setAMPL 向集合中的项目添加最小最大约束
【发布时间】:2019-10-09 02:13:30
【问题描述】:

我最近在课堂上被介绍了 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. 在我的数据文件中:

    参数:基因: GenerationMin GenerationMax := #defines set "GENS" and param "Generation"

    GEN1 10 90

    第二代 10 100

    第三代 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

【问题讨论】:

  • 你确定邮件是Generation1 is not a subscripted param吗?没有Generation1
  • 哦,对不起,我在发帖时一直在玩它,但现在的错误是 GenerationMin 不是 " " "。我已经更新了我的帖子。
  • 模型有Generation,而数据有GenerationMin,GenerationMax。模型和数据部分中的符号名称需要匹配(显然)。

标签: optimization linear-programming ampl


【解决方案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

【讨论】:

  • Kalvelangen,我明白你的意思了。我相信我得到了它的工作!不过,我确实有一个澄清。由于我现在有两个参数,GenMin 和 GenMax,我需要在我的 .mod 文件中添加另一个约束来测试另一个选项。就我而言,我已经在测试 >=,所以我需要为
猜你喜欢
  • 2015-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多