0

我实际上是在使用 IBM ILOG CPLEX 来解决一些优化问题,而且我遇到了二进制变量的问题,我认为我没有以正确的方式使用它。事实上,我想在这里设置我的 mod 文件:

{string} Investments = ...;
float Return[Investments] = ...;
float Covariance[Investments][Investments] = ...;
float Wealth = ...;

/******************************************************************************
 * MODEL DECLARATIONS
 ******************************************************************************/

range float FloatRange = 0.0..Wealth;
dvar int  Binary[Investments] in 0..1;
dvar float  Allocation[Investments] in FloatRange;  // Investment Level


/******************************************************************************
 * MODEL
 ******************************************************************************/

dexpr float Objective =(sum(i,j in Investments) Covariance[i][j]*Allocation[i]*Binary[i]*Allocation[j]);

minimize Objective;

subject to {
    allocate1:   (sum(i in Investments) Return[i]*Allocation[i]*Binary[i])>= 0.02;
  // sum of allocations equals amount to be invested
  allocate2: (sum (i in Investments) (Allocation[i]*Binary[i])) == Wealth;
  //allocate3: (sum (i in Investments) Binary[i]) == 20;


}


float TotalReturn = sum(i in Investments) Return[i]*Allocation[i]*Binary[i];
float TotalVariance = sum(i,j in Investments) Covariance[i][j]*Allocation[i]*Allocation[j]*Binary[i];
4

0 回答 0