不能在 AMPL 中使用小数变量
Can't use fractional variable in AMPL
在我的 AMPL 代码中,我想使用一个值介于 0 和 1 之间的变量。它可以是介于 0 和 1(含 0 和 1)之间的任何分数。我如何在 AMPL 中声明这样的变量并使用它?如果有人为我提供分数背包问题的示例 AMPL 代码,我将不胜感激。
我用 AMPL 编写了这段代码,并尝试 运行 在 Neos 服务器中。它在结果中显示了我所有的变量 x[i,j]=0
,但这不是最佳解决方案。当我使用 var x{i in 1..consumer, j in 1..source} binary;
时,它给出了最佳结果。但在我的优化问题中,消费者可以从多种来源获取能量,并且可以从这些来源的可用能量中获取任何部分。所以,我的变量必须是 0<=x<=1
任何人都可以找出这里的问题吗?谢谢。
我的 .mod 文件是:
param source;
param consumer;
param max_cost;
param max_unit;
param available{j in 1..source};
param demand{i in 1..consumer};
param unit_cost{j in 1..source};
param fi{i in 1..consumer,j in 1..source};
var x{i in 1..consumer, j in 1..source};
minimize total: sum{i in 1..consumer, j in 1..source} ((0.5 * ((unit_cost[j] * x[i,j] * available[j]) / (max_cost * max_unit))) + (0.5 * fi[i,j] * ceil(x[i,j])));
subject to sell{j in 1..source}: sum{i in 1..consumer} x[i,j] <= 1;
subject to limita{i in 1..consumer, j in 1..source}:x[i,j] >=0;
subject to limitb{i in 1..consumer, j in 1..source}: x[i,j] <=1;
subject to dem{i in 1..consumer}: sum{j in 1..source} ( x[i,j] * available[j]) >= demand[i];
我的 .dat 文件是:
param source:= 2;
param consumer:= 1;
param max_cost:= 60;
param max_unit:=100;
param available:= 1 10
2 50;
param unit_cost:= 1 0
2 20;
param fi: 1 2 :=
1 0.3 0.05;
param demand:= 1 30;
而不是
var x{i in 1..consumer, j in 1..source};
你应该写
var x{i in 1..consumer, j in 1..source}>=0,<=1;
在我的 AMPL 代码中,我想使用一个值介于 0 和 1 之间的变量。它可以是介于 0 和 1(含 0 和 1)之间的任何分数。我如何在 AMPL 中声明这样的变量并使用它?如果有人为我提供分数背包问题的示例 AMPL 代码,我将不胜感激。
我用 AMPL 编写了这段代码,并尝试 运行 在 Neos 服务器中。它在结果中显示了我所有的变量 x[i,j]=0
,但这不是最佳解决方案。当我使用 var x{i in 1..consumer, j in 1..source} binary;
时,它给出了最佳结果。但在我的优化问题中,消费者可以从多种来源获取能量,并且可以从这些来源的可用能量中获取任何部分。所以,我的变量必须是 0<=x<=1
任何人都可以找出这里的问题吗?谢谢。
我的 .mod 文件是:
param source;
param consumer;
param max_cost;
param max_unit;
param available{j in 1..source};
param demand{i in 1..consumer};
param unit_cost{j in 1..source};
param fi{i in 1..consumer,j in 1..source};
var x{i in 1..consumer, j in 1..source};
minimize total: sum{i in 1..consumer, j in 1..source} ((0.5 * ((unit_cost[j] * x[i,j] * available[j]) / (max_cost * max_unit))) + (0.5 * fi[i,j] * ceil(x[i,j])));
subject to sell{j in 1..source}: sum{i in 1..consumer} x[i,j] <= 1;
subject to limita{i in 1..consumer, j in 1..source}:x[i,j] >=0;
subject to limitb{i in 1..consumer, j in 1..source}: x[i,j] <=1;
subject to dem{i in 1..consumer}: sum{j in 1..source} ( x[i,j] * available[j]) >= demand[i];
我的 .dat 文件是:
param source:= 2;
param consumer:= 1;
param max_cost:= 60;
param max_unit:=100;
param available:= 1 10
2 50;
param unit_cost:= 1 0
2 20;
param fi: 1 2 :=
1 0.3 0.05;
param demand:= 1 30;
而不是
var x{i in 1..consumer, j in 1..source};
你应该写
var x{i in 1..consumer, j in 1..source}>=0,<=1;