GOOGLE APP脚本-LinearOptimizationService-最小绝对增量-问题不可行

阿方索·科森扎(Alfonso Cosenza)

我目前正在设置一个优化问题,该问题的目标是在给定一些固定约束的情况下定义一些参数,以最大程度地减少与某些目标参数的距离

嗨,您已经在Excel Solver中设置了问题,并且工作正常,但是当我在LinearOptimization服务中进行翻译时,由于优化而变得不可行。

不幸的是,我无法理解是否设置了用于最小化绝对差的数学方法,或者在用Google Linear Optimization Services语言转换模型时仅犯了一些错误。我无法浏览我设置的模型的详细信息。

这是问题陈述

i = 1,2,3

变量

参数
target_i
coeff_i
targetvalue

我想定义Xi这样

最小化总和(abs(Di))
Di = target_i-Xi

有以下矛盾

Xi在0到1之间
sum(Xi)= 1
Sum(Xi * coeff_i)=目标值

拒绝它在线性优化服务中,我使用了等效的问题:

最小和(Di)

用下面的约束上
迪> = target_i-僖
狄<= - (target_i-11)
Xi为0和1之间
总和(十一)= 1
萨姆(僖* coeff_i)= targetvalue

这是我为实现该脚本而编写的脚本

// test data  
  var TargetFrequency=2
  var ActualVolumesByBand=[50,100,1200]
  var AvgDropByBand=[5,15,25]
  var TargetDistribution=[0.25,0.5,0.25]
  var Weight=[2,1,2]
  var NumberOfPeriods=52

  var tolerance=0.0001
  var nBands=ActualVolumesByBand.length
  var engine = LinearOptimizationService.createEngine();

// adds a variable for each distribution band

 for (var i=0; i<nBands; i++)

  {
   engine.addVariable('distance'+i, 0, 10000)
   engine.addVariable('FinalDistribution'+i, 0, 1)
  }

 // set objective coefficients using weight and distance 

   for (var i=0; i<nBands; i++)  
  {
   engine.setObjectiveCoefficient('distance'+i, Weight[i])
  }

// set problem
  engine.setMinimization()



////Start Setting COntraints


  // define support arrays
  var LowerBound0=new Array
  for (var i=0;i<nBands;i++ )
  {
    LowerBound0[i]=0
  }
  Logger.log(LowerBound0)
  var UpperBound1000=new Array
  for (var i=0;i<nBands;i++ )
  {
    UpperBound1000[i]=10000
  }
  Logger.log(UpperBound1000)


  var C12VariblesArray= []
  for (var i=0;i<nBands;i++ )
  {
    C12VariblesArray[i]=['distance'+i, 'FinalDistribution'+i]
  }

  Logger.log(C12VariblesArray)


  var C1Coefficients=[]
  for (var i=0;i<nBands;i++ )
  {
    C1Coefficients[i]=[1, 1]
  }
  Logger.log(C1Coefficients)



/// Adding fist constraint for absolute value minimization

engine.addConstraints(TargetDistribution, UpperBound1000 ,C12VariblesArray ,C1Coefficients )
//

    var C2Coefficients=[]
  for (var i=0;i<nBands;i++ )
  {
    C2Coefficients[i]=[-1,1]
  }
  Logger.log(C2Coefficients)

// Adding second constraint for absolute value minimization


engine.addConstraints(TargetDistribution, UpperBound1000,C12VariblesArray ,C2Coefficients )


// adding constraint for integrity of distribution 


  var C34VariblesArray= []
  for (var i=0;i<nBands;i++ )
  {
    C34VariblesArray[i]='FinalDistribution'+i
  }

  Logger.log(C34VariblesArray)


  var C3Coefficients = []
  for (var i=0;i<nBands;i++ )
  {
    c=1
  }

  Logger.log(C3Coefficients)                

  var c3=engine.addConstraint(1, 1)

  for (var i=0;i<nBands;i++ ){
    c3.setCoefficient('FinalDistribution'+i,1 )
  }


// adding constraint for target frequency 

// calculate total volume

var TotalVolume=0

  for (var i=0;i<nBands;i++ )
{
    TotalVolume=TotalVolume+ActualVolumesByBand[i]
}


    var C4Coefficients = []
  for (var i=0;i<nBands;i++ )
  {
    C4Coefficients[i]=TotalVolume/NumberOfPeriods/AvgDropByBand[i]
  }

  Logger.log(C4Coefficients)                  

  var c4=engine.addConstraint(TargetFrequency,TargetFrequency)
  for (var i=0;i<nBands;i++ ){
    c4.setCoefficient('FinalDistribution'+i,C4Coefficients[i] )
  }

  ////Finish setting COntraints


// start solving

var solution = engine.solve();
if (!solution.isValid()) {
  Logger.log('No solution ' + solution.getStatus());
} else {
   for (var i=0;i<nBands;i++ )
  {
    Logger.log('Value of band '+i+': ' + solution.getVariableValue('FinalDistribution'+i));
  }
}

您能帮我理解错误在哪里吗?

欧文·卡尔维拉根

我没有查看源代码,但是在您的描述中看到了一个问题。你写:

minimize sum(Di)
with the following contraints
Di >= target_i-Xi
Di <= -(target_i-Xi)

这看起来不正确。该数学通常推导为:

min sum(i, |target(i)-X(i)|)

<=>

min sum(i, d(i))
-d(i) <= target(i)-X(i) <= d(i)

<=>

min sum(i, d(i))
d(i) >= target(i)-X(i)
d(i) >= -(target(i)-X(i))    

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

不可行的解决方案,绝对可行 - CPLEX

来自分类Dev

由于问题不可行,纸浆获得结果,而问题不可行

来自分类Dev

Google App脚本setTimeout函数问题

来自分类Dev

Google App脚本条件格式设置问题

来自分类Dev

GLPK蓄水库-不可行

来自分类Dev

C ++候选函数不可行?

来自分类Dev

Cplex产生负面或不可行的结果

来自分类Dev

需要重塑以避免不可行

来自分类Dev

如何使用Python Gekko解决IPOPT中的本地不可行问题?

来自分类Dev

“找不到脚本功能”-Google App脚本

来自分类Dev

分析Google App脚本的性能

来自分类Dev

google app脚本gmail测试

来自分类Dev

从PHP调用Google App脚本?

来自分类Dev

为什么此线性程序在GLPK中不可行?

来自分类Dev

需要重新设计以避免不可行

来自分类Dev

进程/线程的Russage Cpu时间不可行

来自分类Dev

如何防止纸浆和蟒蛇的不可行错误?

来自分类Dev

IncrementalScore在Optaplanner中产生不可行的解决方案

来自分类Dev

操作符过载但不可行

来自分类Dev

C++ 默认复制构造函数不可行

来自分类Dev

Google Sheets脚本循环问题

来自分类Dev

Google App脚本-允许匿名用户访问

来自分类Dev

在Google App脚本中进行Nslookup或dig

来自分类Dev

Google App脚本图表选项

来自分类Dev

Google App脚本缓存服务配额

来自分类Dev

从Google App脚本中的URL抓取表

来自分类Dev

Google App脚本从网站提取数据

来自分类Dev

在Google App脚本中运行的jquery

来自分类Dev

使用Google App脚本解析HTML