Linear Programming Excel Solver无法找到可行解:最小化B19目标函数咨询
排查Excel Solver找不到可行解的问题
嘿,我来帮你梳理下为什么Excel Solver找不到可行解——这种情况十有八九是约束条件存在逻辑冲突,或者参数/设置出了问题,咱们一步步拆解:
核心问题:约束条件的逻辑矛盾
先明确你的约束表述(毕竟布尔变量的写法容易有歧义):我猜xi'是指非xi(也就是1-xi,因为xi是0/1的布尔变量),那咱们把约束展开分析:
1. 逐个约束的逻辑推导
- 第一个约束
sum(li * xi') < F等价于sum(li) - sum(li*xi) < F,进一步转化为sum(li*xi) > sum(li) - F。 - 第二个约束是对每个i的
li * xi > F':- 如果xi取0,左边是0,约束变成
0 > F'——如果F'是≥0的数值,xi=0直接不满足,意味着所有xi必须取1; - 如果xi取1,约束变成
li > F'——只要有任何一个i的li ≤ F',xi=1就不满足这个约束。 - 这就陷入了死局:xi不能取0,也不能取1,自然没有可行解。
- 如果xi取0,左边是0,约束变成
2. 先做手动可行性验证
你可以先手动试几组xi的0/1组合:
- 试所有xi=1:检查是否每个
li > F',同时sum(li*0) < F(也就是0 < F); - 试部分xi=1、部分xi=0:比如挑几个
li > F'的i让xi=1,剩下的xi=0,检查是否满足sum(li*(1-xi)) < F。
如果手动都找不到符合条件的组合,那就是约束本身矛盾了,得调整约束逻辑或者参数。
排查Excel Solver的设置问题
- 确认布尔变量设置正确:在Solver的「添加约束」对话框里,一定要把xi的单元格区域设置为「bin(二进制)」,别选错成整数或者其他类型。布尔变量的识别错误会让Solver找错方向。
- 严格约束的处理问题:Excel Solver本质上只能处理
≤、≥、=的约束,严格小于/大于会被转化为≤(F-ε)或≥(F'+ε)(ε是极小值)。如果ε设置不合理(比如太小导致精度问题,或者太大导致约束过严),也可能让Solver找不到解。可以先把严格约束改成非严格的(比如< F改成≤ F),看看能不能找到解,再逐步调整。
其他可能的细节
- 检查目标函数单元格B19的公式:确保
sum(xi*di)的引用是正确的(虽然这个一般不会导致无可行解,但也别大意); - 检查Solver选项:有没有不小心开启「忽略整数约束」?如果开了,Solver会尝试非0/1的数值,但最终还是满足不了布尔约束,也会提示无可行解。
内容的提问来源于stack exchange,提问作者h995523
相关产品推荐
相关产品推荐

