微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CPLEX ILOG - 3 个农场的 3 种作物

如何解决CPLEX ILOG - 3 个农场的 3 种作物

我正在尝试解决 3 个农场中每个农场的 3 种作物的 9 个种植决策。

我获得了每个农场的可用土地、每个农场的可用水量、每种作物的最大配额、每种作物的耗水量和每种作物的利润的数据。我不允许列出 .dat 文件中的所有系数。

以下是我在 .dat 文件中输入的内容

Farms = {Rice,Barns,Snyder};
Crops = {Corn,Wheat,SoyBeans}; 
UsableLand = [400,600,300];
Water = [600,800,375];
MaximumQuota = [600,500,325];
WaterConsumption = [3,2,1];
Profit = [1000,750,250];

有 3 个限制条件:可用土地、可用水和最大配额。
目标是利润最大化。

下面是我在 .mod 文件中的内容,它(最终)没有错误解决,但没有给出 Excel 求解器运行的正确答案。任何指导将不胜感激!

{string} Farms = ...;
{string} Crops = ...;

int UsableLand[Farms]=...;
int Water[Farms]=...;
int MaximumQuota[Crops]=...;
int WaterConsumption[Crops]=...;
int Profit[Crops]=...;

constraint LandAcre[Farms];
constraint Wateracre[Farms];
constraint CropLimit[Crops];

dvar float+ ProductionAmount[Crops][Farms];

maximize
  sum(i in Crops,p in Farms)
    Profit[i]*ProductionAmount[i][p];
        
subject to {
  forall(i in Farms)
    LandAcre[i]:
        sum(j in Crops,p in Farms)   ProductionAmount[j][p] <= UsableLand[i];   
  forall(i in Farms)
    Wateracre[i]:
        sum(j in Crops,p in Farms)   WaterConsumption[j] <= Water[i]; 
  forall(i in Crops)
    CropLimit[i]:
        sum(j in Crops,p in Farms)   ProductionAmount[j][p] <= MaximumQuota[i];
}

解决方法

这看起来很可疑:

  forall(i in Farms)
    LandAcre[i]:
        sum(j in Crops,p in Farms)   ProductionAmount[j][p] <= UsableLand[i];

它可能应该是:

  forall(i in Farms)
    LandAcre[i]:
        sum(j in Crops)   ProductionAmount[j][i] <= UsableLand[i];

其他约束相同。

一个有用的调试工具是写出 LP 文件并检查它是否存在意外情况。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。