飞扬6666 2024-09-20 22:21 采纳率: 100%
浏览 2
已采纳

lingo为什么没法进行全局求解?

我用lingo进行价格最优求解,但是老是出错,我希望可以全局求解,请问我这个代码怎么改才可以?


model:

sets:
    feiliao/1..10/: shuliang, N, P2O5, K2O, youjizhi, jiage;
endsets

data:
    shuliang = ,,,,,,0,0,0,0;
    N = 46.2,24.3,21.6,0,11.1,0,0,0,0,0;
    P2O5 = 0,0,0,12.2,45.1,0,0,0,0,0;
    K2O = 0,0,0,0,0,60.3,0,0,0,0;
    youjizhi = 0,0,0,0,0,0,0,0,0,0;
    jiage = 2800,1370,765,425,1260,1380,180,88,0,0;
enddata

all_shuliang = @sum(feiliao(i) : shuliang(i));
all_shuliang = 1000;

all_N = @sum(feiliao(i) : shuliang(i) * N(i) / 100);
all_P2O5 = @sum(feiliao(i) : shuliang(i) * P2O5(i) / 100);
all_K2O = @sum(feiliao(i) : shuliang(i) * K2O(i) / 100);
all_youjizhi = @sum(feiliao(i) : shuliang(i) * youjizhi(i) / 100);
all_jiage = @sum(feiliao(i) : shuliang(i) * jiage(i));

shiji_N = all_N / (all_shuliang + 0.01) * 100;
shiji_P2O5 = all_P2O5 / (all_shuliang + 0.01) * 100;
shiji_K2O = all_K2O / (all_shuliang + 0.01) * 100;
shiji_youjizhi = all_youjizhi / (all_shuliang + 0.01) * 100;
shiji_jiage = all_jiage / (all_shuliang + 0.01);

chengpin_N = shiji_N * (1 + (3.8) / 100);
chengpin_P2O5 = shiji_P2O5 * (1 + (-2.5) / 100);
chengpin_K2O = shiji_K2O * (1 + (9) / 100);
chengpin_zong = chengpin_N + chengpin_P2O5 + chengpin_K2O;
chengpin_youjizhi = shiji_youjizhi * (1 + (0) / 100);

abs_N = @abs(chengpin_N - (11.1));
lin_N = @if( abs_N #le# 0.25 , abs_N ^2, abs_N *1000);

abs_P2O5 = @abs(chengpin_P2O5 - (6.1)) ;
lin_P2O5 = @if( abs_P2O5 #le# 0.25 , abs_P2O5 ^2, abs_P2O5 *1000);

abs_K2O = @abs(chengpin_K2O - (8)) ;
lin_K2O = @if( abs_K2O #le# 0.25 , abs_K2O ^2, abs_K2O *1000);

abs_zong = @abs(chengpin_zong - (25.2)) ;
lin_zong = @if( abs_zong #le# 0.25/5 , abs_zong ^2*5, abs_zong*5 *1000);

abs_youjizhi = @abs(chengpin_youjizhi - (0)) ;
lin_youjizhi = @if( abs_youjizhi #le# 0.25 , abs_youjizhi ^2, abs_youjizhi *1000);

[myzhi] min = lin_N + lin_P2O5 + lin_K2O + lin_zong + lin_youjizhi + shiji_jiage ;

data:
    @pointer(2) = @status();
    @pointer(3) = myzhi;
    @pointer(4) = shuliang;
enddata

end

下面是lingo18运行的出错结果:

img

img

  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-09-20 22:22
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    在您的模型中,问题的出现似乎与变量的数量和全局求解的限制有关。Lingo全局求解器在某些版本中对非线性变量的数量有限制,当模型中的非线性变量数量超过这个限制时,Lingo会退回到使用默认的非线性求解器。在您的情况下,报错信息指出模型中的非线性变量数量超过了版本限制(在这个情况下是5个)。因此,您遇到的问题可能是由于模型中的非线性变量过多导致的。

    为了解决这个问题,您可以尝试以下几种方法:

    1. 简化模型:检查您的模型,看看是否可以减少非线性变量的数量。这可能意味着您需要简化问题或重新构造模型。
    2. 使用不同的求解器:如果您的模型不能简化,并且必须使用全局求解器,您可以尝试升级Lingo到更高的版本,新版本可能允许更多的非线性变量。
    3. 分段求解:如果模型复杂且难以简化,您可以尝试将大问题分解为几个小问题进行求解。例如,您可以先优化一部分变量,然后再基于这些优化的结果进一步优化其他变量。
    4. 使用其他工具:考虑使用其他支持全局优化的工具或软件库来解决问题。例如,其他优化软件可能没有对非线性变量的数量进行限制。

    请注意,全局优化问题通常很复杂且计算量大,因此可能需要很长时间才能找到解决方案。在尝试上述方法之前,请确保您的数据正确无误并且符合模型的假设和约束条件。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 9月21日
  • 创建了问题 9月20日

悬赏问题

  • ¥15 java 在同一包下无法跨文件引入自己写的类,也无法导包过去
  • ¥15 求帮生成一个lattice diamond的许可证
  • ¥15 大一前端新生求教学解答
  • ¥15 如何制作一个可以查看“网游有序列的装备词条”的软件/插件
  • ¥15 CS2打5E与完美天梯匹配会与服务器断开连接(黑框没标明具体原因)
  • ¥15 利用cst反推材料电磁参数,推出想x,y,z方向的相对介电常数与磁导率
  • ¥15 求帮助!用赛灵思FPGA XC7A35T对一个频率50MHz的数字信号读取高低电平,只用HR bank普通单端io进行采样可以吗
  • ¥15 训练准确率100%,测试准确率只有50%
  • ¥15 grafana创建dashhabord提示no data sources of type Prometheus Alert
  • ¥15 python用arima时间序列法预测不出结果 急