不能在 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;