利用python pulp做线性规划

一道数学模型题

某服务部门一周中每天需要不同数目的雇员:周一到周四每天至少需要50人,周五至少需要80人,周六和周日至少需要90人,现规定应聘者需要连续工作5天,是确定方案,即周一到周日每天聘用多少人,使在满足需要的条件下聘用总人数最少?

1、首先使用pulp库

from pulp import*

prob = LpProblem("The Whiskas Problem",LpMinimize)#用LpProblem来创建一个变量prob。这个函数具有两个参数,第一个为这个

#问题的描述字符串,第二个参数描述你需要解决的LP的类型,“LpMinimize"或则"LpMaximize":求最大解或者最小解

2、设置变量

day1 = LpVariable("day1",0,None,LpInteger)#描述 第一个字符串 第二个下边界 第三个上边界 第四个变量类型
day2 = LpVariable("day2",0,None,LpInteger)#如果是浮点型换成float
day3 = LpVariable("day3",0,None,LpInteger)
day4 = LpVariable("day4",0,None,LpInteger)
day5 = LpVariable("day5",0,None,LpInteger)
day6 = LpVariable("day6",0,None,LpInteger)
day7 = LpVariable("day7",0,None,LpInteger)

3.制定约束条件

prob += day1 + day2 + day3 + day4 + day5 + day6 + day7
prob += day1 + day4 + day5 + day6 + day7 >= 50
prob += day2 + day1 + day5 + day6 + day7 >= 50
prob += day3 + day1 + day2 + day6 + day7 >= 50
prob += day4 + day1 + day2 + day3 + day7 >= 50
prob += day5 + day1 + day2 + day3 + day4 >= 80
prob += day2 + day3 + day4 + day5 + day6 >= 90
prob += day3 + day4 + day5 + day6 + day7 >= 90


5.求最优解

prob.solve()
prob.writeLP("WhiskasModel.lp")             #打印出来相关信息
print("Status:", LpStatus[prob.status])     #最优解

for v in prob.variables():
    print(v.name, "=", v.varValue)              #打印每个变量名字
print( "Total Cost of Ingredients per can = ", value(prob.objective))#百分比可以为


6.加一个比较高端的,慢慢看吧



Ingredients = ['CHICKEN', 'BEEF', 'MUTTON', 'RICE', 'WHEAT', 'GEL']

costs = {'CHICKEN': 0.013,
         'BEEF': 0.008,
         'MUTTON': 0.010,
         'RICE': 0.002,
         'WHEAT': 0.005,
         'GEL': 0.001}

proteinPercent = {'CHICKEN': 0.100,
                  'BEEF': 0.200,
                  'MUTTON': 0.150,
                  'RICE': 0.000,
                  'WHEAT': 0.040,
                  'GEL': 0.000}

fatPercent = {'CHICKEN': 0.080,
              'BEEF': 0.100,
              'MUTTON': 0.110,
              'RICE': 0.010,
              'WHEAT': 0.010,
              'GEL': 0.000}

fibrePercent = {'CHICKEN': 0.001,
                'BEEF': 0.005,
                'MUTTON': 0.003,
                'RICE': 0.100,
                'WHEAT': 0.150,
                'GEL': 0.000}

saltPercent = {'CHICKEN': 0.002,
               'BEEF': 0.005,
               'MUTTON': 0.007,
               'RICE': 0.002,
               'WHEAT': 0.008,
               'GEL': 0.000}

prob = LpProblem("The Whiskas Problem", LpMinimize)

ingredient_vars = LpVariable.dicts("Ingr",Ingredients,0)


prob += lpSum([costs[i]*ingredient_vars[i] for i in Ingredients]), "Total Cost of Ingredients per can"


prob += lpSum([ingredient_vars[i] for i in Ingredients]) == 100, "PercentagesSum"
prob += lpSum([proteinPercent[i] * ingredient_vars[i] for i in Ingredients]) >= 8.0, "ProteinRequirement"
prob += lpSum([fatPercent[i] * ingredient_vars[i] for i in Ingredients]) >= 6.0, "FatRequirement"
prob += lpSum([fibrePercent[i] * ingredient_vars[i] for i in Ingredients]) <= 2.0, "FibreRequirement"
prob += lpSum([saltPercent[i] * ingredient_vars[i] for i in Ingredients]) <= 0.4, "SaltRequirement"


prob.solve()                                #处理出最优解


prob.writeLP("WhiskasModel.lp")             #打印出来相关信息


print("Status:", LpStatus[prob.status])     #最优解


for v in prob.variables():
    print(v.name, "=", v.varValue)              #打印每个变量名字


print( "Total Cost of Ingredients per can = ", value(prob.objective))#百分比可以为


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,468评论 5 473
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,620评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,427评论 0 334
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,160评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,197评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,334评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,775评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,444评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,628评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,459评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,508评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,210评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,767评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,850评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,076评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,627评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,196评论 2 341

推荐阅读更多精彩内容

  • 感谢清崎老师与编辑的合力出版,这本书的确对我们的认知会产生很大的改变。 【本书作者】罗伯特·T·清崎 莎伦·...
    文羽墨阅读 5,867评论 0 25
  • 就在一瞬间, 从天堂跌入了地狱。 伸出双手求救, 只得到冷漠的拒绝。 千疮百孔的心, 还有谁能治愈? 时间?还是另...
    苑尧阅读 192评论 0 6
  • 方案一:直接 MD5 (不够安全)pwd = pwd.md5String; 方案二: MD5 + key(key...
    ShenYj阅读 334评论 0 1