无法在AMPL中使用分数变量

问题描述

在我的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;