问题描述
在我的AMPL代码中,我想使用一个值在0到1之间的变量。它可以是0到1(包括0和1)之间的任何分数。如何在AMPL中声明此类变量并使用它?如果有人为我提供示例性的背包问题AMPL代码,我将不胜感激。
我已经用AMPL编写了这段代码,并试图在Neos Server中运行。它向我显示了结果中的所有变量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;