Matlab-为什么包含肯定假设会取消肯定答案的资格?

时间:2019-03-27 04:20:24

标签: matlab

运行下面的代码将给出两组解决方案。对于一组解决方案,z值都将> = 0(39.4962和0)。对于另一组解决方案,一个z值将为<0(-39.4962和0)。

如果我包含当前被注释掉的“ assumeAlso”行,则不会给出任何解决方案。这不是我所期望的。我认为只有第二套解决方案才被取消资格,因为第一套解决方案与假设不矛盾。

有人能启发我为什么会这样吗?提前致谢。

SELECT Item, Price, location 
FROM   ItemTable  
       PIVOT(Sum(price) 
            FOR location IN([North], 
                            [South])) pvt 

1 个答案:

答案 0 :(得分:2)

您正在尝试解决具有无限解决方案的问题。换句话说,您要解决的变量x1 y1 z1 x2 y2 z2之间存在独立性。求解器似乎仅在约束变量时才发现这种独立性(并且令人困惑,因此,如果不这样做,只会输出有限数量的解):即使指定了一些愚蠢的东西

,也会发现您得到相同的警告
assumeAlso(z1>=-inf)
assumeAlso(z2>=-inf)

assumeAlso(z1>=0)这样的不等式约束不会消除独立性。相反,强加诸如assumeAlso(z2==0)平等约束将解决此问题。然后,您可以指定assumeAlso(z1>=0)来查找所需的一种特定解决方案。即,指定:

assumeAlso(z1>=0)
assumeAlso(z2==0)

但是,请注意,例如,您将找到约束assumeAlso(z2==1)或什至assumeAlso(z2==2*z1)等的另一种可行解决方案……