MATLAB含有绝对值的线性规划,Lingo求解带绝对值的线性规划模型

最近在解决一个费用分摊的问题,就是让费用在几个不同的项目之间分摊,并且分摊后的总额和费用之间差额的绝对值在一定的范围之内,当然越小越好。该问题是一个典型的线性规划问题,说实话如果没有学过运筹学,肯定解决不了该问题,幸好博主学过,而且还解决过比这更复杂的问题,今天就写一篇文章,怀念一下读研时的美好时光,也给有类似问题的人一个思路。

先把这个问题用一个很简单的例子描述:假设有三种项目费用分别是,项目A90 元,项目B80 元,项目C70元,总费用是1983元,现在要确定ABC三个各分配多少个,才能最接近1983元,且最大误差不得超过30元。

根据上述问题确定模型(模型不知道描述得准确吗,还有一个要求就是绝对值里面的数最小):

|90*X+80*Y+70*Z-1983|<=30;

X,Y,Z>=0;

用LINGO描述为:

Min=@ABS(90*x+80*y+70*z-1983);

@ABS(90*x+80*y+70*z-1983)<=30;

@GIN(x);

@GIN(y);

@GIN(z);

用LINGO求解的结果为:

从结果上看出,X、Y、Z分别取值18、1、4,能使分配的总和最接近费用值,与费用值的差额为3。

a0dfac336f29769c1df3012881c799f0.png

考虑到不止一个费用,而是有成百上千个费用需要分摊,那么就得考虑利用程序来批量计算。按之前上学时的做法,写程序,通过程序调用数据生成模型来求解。这里就将数据保存到计事本中,然后用C语言根据计事本中的数据,生成模型求解,将求解结果返回到计事本中。

假设文本文件为data.txt,内容为编号,费用值两个内容,现在用C读取每行的费用值,生成模型求解,然后将结果保存到每行的结尾。

data.txt的内容:

1 1983

2 2023

3 2323

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值