循环优化:

循环优化:

现在我们提供我们的第一个思想实验:考虑在由约束定义的可行区域上优化线性函数的问题

{displaymath} \ \开始罪(2 \π\压裂{我}{10 ^ 6})x + \ cos(2 \π\压裂{我}{10 ^ 6})y \ leq 1,给所有我\ \ \ {1 \ ldots 10 ^ 6 \}, {displaymath} \结束

即可行域本质上是内的一个单位圆< span > < /美元跨度> \ mathbb {R} ^ 2 < span > < / span >美元.注意,对于所有的目标函数,对应的最优点将由两个非常接近平行的线性约束来定义。这个问题的数值解会怎样?你能猜到吗?情况如下图所示:
图像codedraw1

为了执行实验,我们执行代码circleOpt.py,其中我们随机选取一个目标向量,找出所得到的优化问题的最优解,并计算出几个相关量:

  • 最糟糕的距离在报告的最初的解决方案,和理论的解决方案实际上优化了一个完美的圆,在所有之前的运行。
  • 这是Gurobi在之前的所有运行中报告的最严重的边界违规。
  • 这是Gurobi在之前所有运行中报告的最严重的约束违反。
  • 这是古罗比在之前的所有比赛中报告的最严重的两次犯规。
  • 之前的实验次数。
  • 累积的单纯形迭代次数。
  • < span > < / span > \ kappa美元美元< span > < / span >KappaExact属性)值为当前的最优基。

输出示例如下:

新增2个Vars和1048576 constraints in 19.19 seconds Errors: 8.65535e-08 0 2.94137e-07 2.77556e-17 Iter 0 10 Kappa 3150.06错误:4.81978e-07 0 3.22359e-07 2.77556e-17 Iter 1 21 Kappa 3009.12错误:4.81978e-07 0 3.4936e-07 1.11022e-16 Iter 2 33 Kappa 2890.58错误:1.53201e-06 0 9.78818e-07 1.11022e-16 Iter 6 79 Kappa 1727.89错误:1.61065e-06 0 8.8478e -07 1.11022e-16 Iter 46 536 Kappa 1880.73错误:1.61065e-06 0 8.8478e -07 1.11022e-16 Iter 52 602 Kappa 1817.27错误:1.61065e-06 0 9.45577e -07 1.11022e-16 Iter 54 625 Kappa 1757.96错误:1.69167e-06 0 9.78818e-07 1.11022e-16 Iter 64 742 Kappa 1727.89错误:1.69167e-06 0 3.29612e-07 2.22045e-16 Iter 95 1101 Kappa 2975.84错误:1.69167e-06 0 9.04817e-07 1.66533e-16 Iter 92 1067 Kappa 1797.06错误:1.69167e-06 0 2.94137e-07 2.22045e-16 Iter 94 1089 Kappa 3150.06错误:1.69167e-06 0 3.29612e-07 2.22045e-16 Iter 95 1101 Kappa 2975.84错误:1.69167e-06 0 3.4936e-07 2.22045e-16 Iter 98 1137 Kappa 2890.58错误:1.69167e-06 0 9.25086e-07 2.22045e-16 Iter 99 1147 Kappa 1777.3错误:1.69167e-06 0 9.78818e-07 2.22045e-16 Iter 107 1237 Kappa 1727.89错误:1.69167e-06 0 9.99895e-07 2.22045e-16 Iter 112 1293 Kappa 1709.61错误:错误:1.9603e -06 0 9.99895e-07 2.22045e-16 Iter 134 1545 Kappa 1727.89错误:1.9603e -06 0 9.99895e-07 2.22045e-16 Iter 134 1545 Kappa 1709.61

令人惊讶的是,报告的错误相当小。这是为什么呢?至少有两个因素:模型有一个有界的可行区域(在这种情况下,两个变量的范围是< span > < / span >美元美元[1]< span > < / span >).另外,从一个极值点(两个相邻约束交点处的点)到它的相邻约束的距离也相对较小,所以都是这样< span > < / span > \ varepsilon美元美元< span > < / span >-最优解彼此接近。

我们鼓励您使用这些代码,干扰一些输入数据,并分析结果。你会看到理论和数值最优解之间的差异与扰动的大小相当。