作为编程小白,最快的成长方式就是有人压迫你去学。例如上司!
线性规划的python实现。原理我是懂的,本以为简单的代码就可以实现。但实际上遇到很多问题,几近崩溃。上网搜了相当多的文献资料,都是简单的代码实现,对于我这个变量不定、限制条件超多的需求来说,毫无作用。后来查看官方文档后,曲线救国!!
话不多说,直接说过程以及代码。有不对的地方欢迎批评斧正!
官方的pulp包给出的案例为两个:一个简单的两个变量以及两个限定条件。这个有很多案例,我就不再细说。我主要说一下利用字典来进行线性规划的方式。
最后附有代码:这是我做的小案例,其中限定条件很多都是重复的(太懒了)。
遇到的主要问题如下:
1.一开始我将变量设定成list,结果导致直接报错,大概就是列表不是适用的格式。看完官方文档,考虑到没有这个案例,所以将list全部改为dict.(划重点):一定将所有的dict 统一成一样的key!后面会说到他的重要性。
2.设置变量时候有个lowBound = ,upBound = 。因为我的变量这个时候x = tf.LpVariable.dicts(“Ingr”,name,[list])中name是列表格式,所以我理所应当的将上下限设置成list格式(每个变量的上线下限都有不同的要求)。但实际上根本运行不了,而官网上的是直接将下限设为0,我个人觉得这个这个包的一个bug。也有可能是我还不懂,需要大家多多给出建议。无奈我只能曲线救国,首先将下限设为0,然后准备放在限制条件中。
3.每个限定条件后面的,[字符串]一定不能省略且不能重复。我一开始按照官网的格式写下来就是不对,排除其他问题后还是不行。我之后将官网的demo下载下来,然后将自己的代码一点点填上。结果运行出结果了。(当时真是百思不得解,现在觉得自己好low)我真的是一点点在那对代码,没问题啊?最后我想不会是因为备注吧?(当时真以为是备注)。结果加上后,结果就出来了!哈哈哈……我真傻真的……
4.这里就要说到统一key的重要性了。普通的几个变量直接pulp.LpVariable()即可,但字典需要pulp.LpVariable.dicts().而且出来的变量名称和x1、x2……完全不一样。这里有需要的直接运行就知道了(后面结果中也有呈现)。我觉得这个简直太好了,特别容易识别。
for i in