【问题标题】:Proportionality in ILOG CPLEXILOG CPLEX 中的比例性
【发布时间】:2021-04-05 00:37:01
【问题描述】:

我正在尝试在我的解决方案中包含相称性。 .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];

我的 .mod 目前构建如下:

{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];
constraint Propotionality[Crops][Farms];

dvar float+ ProductionAmount[Crops][Farms];

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

我的问题是如何将比例性纳入约束条件。我是否添加诸如:

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

非常感谢任何指导!

【问题讨论】:

    标签: linear-programming cplex ilog


    【解决方案1】:

    你可以使用

    dvar float ratio[Crops] in 0..1;
    

    然后写

    forall(j in Farms)
        Proportionality :
             forall(i in Crops)ProductionAmount[i][j] / UsableLand[j] == ratio[i]; 
    

    你的整个 .mod 将是

    {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];
    //constraint Propotionality[Crops][Farms];
    
    dvar float+ ProductionAmount[Crops][Farms];
    dvar float ratio[Crops] in 0..1;
    
    maximize
      sum(i in Crops)
        sum(j in Farms)
        Profit[i]*ProductionAmount[i][j];
            
    subject to {
      forall(j in Farms)
        LandAcre[j]:
            sum(i in Crops)   ProductionAmount[i][j] <= UsableLand[j];   
      forall(j in Farms)
        WaterAcre[j]:
            sum(i in Crops)   WaterConsumption[i] * ProductionAmount[i][j] <= Water[j]; 
      forall(i in Crops)
        CropLimit[i]:
            sum(j in Farms)   ProductionAmount[i][j] <= MaximumQuota[i];
            
       forall(j in Farms)
        Proportionality :
             forall(i in Crops)ProductionAmount[i][j] / UsableLand[j] == ratio[i];    
            
            
            
          }  
    
      
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-06
      相关资源
      最近更新 更多