首先,提出第一个问题,
1.当目标函数与约束条件不相关时候,即:目标函数中没有约束条件的变量时:变量如何取值?
进行简单实验:(实验1)

结果为:

此时的变量取到0;
我们对两个不等式的顺序进行互换:(实验2)

结果为:

因此得到第一个猜想1:不相关时,最终的取值与x的顺序有一定的关系
但是第一个结果的0为什么会出现呢?我的思路是判断x的默认范围:

我们想到对变量执行@free(x);(实验3)

结果为:

再换顺序:(实验4)

结果符合约束交集:

验证结果(实验4-1):


这里我们开始猜想2,约束与目标函数不相关,则约束不知道自己应该取最大值还是最小值(为方便理解,以下用区间表示)
使用@free后,取值都是x的右区间,假如右区间不存在呢?
实验5:


则:右边界不存在,则取左边界
猜想3:左边界不存在,则取右边界
针对实验1的0,其实就是默认x的左边界,使用@free后,左边界不存在,则最后变成取右边界的数值;
实验1的特点是第一个式子比第二个式子的区间小,出现结果取左区间的现象
我们对另一种情况进行实验:
实验6-1:


实验6-2:(交换顺序,结果依然正确)


对于实验6-1,第一个区间比第二个区间小,取左边界,对于实验6-2,第一个区间比第二个区间大,取右边界,右边界没有,取左边界
此处,我们使用>、<进行约束,结果为:

我们修改使用@bnd进行计算:


结果为8.04
我们直接给出结论,使用第一个>、<进行约束时候,s>0的约束条件下s的区间是最大的
上面的s>5.6667,s<8.04均比s>0的区间小,因此结果取到交集的左边界,也就是5.66667,我们交换顺序,结果也是5.6667
而当我们使用函数@bnd的时候,@bnd没有给出s一个确定的区间,因此程序中只有两个不等式,s>=5.66667,与s<=8.04
此时我们交换两个式子的顺序,让小区间s<=8.04排到前面,发现结果发生变化:


说明我们的结论是可行的
解决方案:将系数CB改为一个不为0的数字,则变量重新明确自己的取值,结果便不会出错了


浙公网安备 33010602011771号