You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Minizinc云VM选型模型使用coin-bc求解器报float_div错误如何解决

问题原因

  • 报错原因:COIN-OR BC(CBC)属于混合整数线性规划(MILP)求解器,仅支持线性约束,你当前目标函数中的浮点除法属于非线性运算,不在CBC支持范围内,因此触发float_div报错。
  • Gecode运行过慢原因:Gecode是通用约束编程求解器,对带优化目标的中大规模组合问题求解效率远低于专用MILP求解器,因此难以快速收敛到最优解。
  • 额外逻辑错误:你当前设置的目标是maximize (0.9 * totalPrice) / (0.1 * totalACU),等价于追求成本越高、性能越低,和你「压低总成本、抬高总ACU」的需求完全相反。

修复方案

1. 改写目标函数为线性形式

无需使用除法做比率计算,直接用线性加权的方式平衡成本和性能权重即可,完全符合MILP求解器的要求:

% 权重可按需调整:成本权重越高,整体越倾向选低价实例;性能权重越高越倾向选高性能实例
var float: targetFunc = 0.9 * totalPrice - 0.1 * totalACU;
% 改为最小化目标,等价于成本尽可能低、性能尽可能高
solve minimize targetFunc;

如果不想引入浮点变量,也可以将系数放大为整数,运行效率更高:

var int: targetFunc = 9 * totalPrice - 1 * totalACU;
solve minimize targetFunc;

2. 补全遗漏约束

你当前代码缺少磁盘配置匹配约束和磁盘成本计算,建议同步补充:

% 补充磁盘容量匹配约束
constraint forall(vm in existingVMs)(
    vmDiskSizes[selectedDiskSize[vm]] >= vmDisk[vm]
);
% 总价格补充磁盘成本
var float: totalPrice = sum(vm in existingVMs)(
    vmSizePrice[selectedSize[vm]] + vmDiskPrice[selectedDiskSize[vm]]
);

3. 继续使用CBC求解器

修改后重新运行原命令即可,CBC对线性整数规划问题的求解效率远高于Gecode,可快速得到最优解。

内容的提问来源于stack exchange,提问作者Eosfor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 07:36:03