栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

将scipy.optimize.minimize限制为整数值

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将scipy.optimize.minimize限制为整数值

纸浆溶液

经过研究,我认为您的目标函数不是线性的。我在Python纸浆库中重新创建了问题,但纸浆不喜欢我们用浮点数和’LpAffineexpression’进行划分。该答案表明线性编程“不理解除法”,但该注释是在添加约束而不是目标函数的情况下进行的。该评论将我指向“混合整数线性分数规划(MILFP)
”和Wikipedia上。

如果纸浆实际起作用,可以按以下方法进行处理(也许有人可以弄清楚原因):

import pulpdata = [(481.79, 5), (412.04, 4), (365.54, 3)] #, (375.88, 3), (379.75, 3), (632.92, 5), (127.89, 1), (835.71, 6), (200.21, 1)]x = pulp.LpVariable.dicts('x', range(len(data)), lowBound=0, upBound=7, cat=pulp.LpInteger)numerator = dict((i,tup[0]) for i,tup in enumerate(data))denom_int = dict((i,tup[1]) for i,tup in enumerate(data))problem = pulp.LpProblem('Mixed Integer Linear Programming', sense=pulp.LpMinimize)# objective function (doesn't work)# TypeError: unsupported operand type(s) for /: 'float' and 'LpAffineexpression'problem += sum([numerator[i] / (denom_int[i] + x[i]) for i in range(len(data))])problem.solve()for v in problem.variables():  print(v.name, "=", v.varValue)

使用scipy.optimize的蛮力解决方案

您可以在函数中为每个使用

brute
和的范围。如果函数中有3 s,则范围元组中也将有3 s。所有这一切的关键是添加 步*
的尺寸为如此。
slice``x``x``slice

1``slice(start, stop,
step
*`)``slice(#,

, 1)`

from scipy.optimize import bruteimport itertoolsdef f(x):  return (481.79/(5+x[0]))+(412.04/(4+x[1]))+(365.54/(3+x[2]))ranges = (slice(0, 9, 1),) * 3result = brute(f, ranges, disp=True, finish=None)print(result)

itertools解决方案

或者,您可以使用itertools生成所有组合:

combinations = list(itertools.product(*[[0,1,2,3,4,5,6,7,8]]*3))values = []for combination in combinations:  values.append((combination, f(combination)))best = [c for c,v in values if v == min([v for c,v in values])]print(best)

注意 :这是原始功能的缩小版本,仅供参考。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/652637.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号