PuLP上的线性编程具有不同的大小参数

问题描述 投票:1回答:1

我需要解决python中的线性规划问题并遇到PuLP。但是,我对如何以简单的方式解决具有不同数量输入的问题有一些疑问。

我有以下数组,都具有相同的尺寸: a = [a0,a1,...,an](未知变量)

你= [u0,u1,...,un] v = [v0,v1,...,vn] (这些值已知)

我想最大化:a0 * u0 + a1 * u1 + ... + a * un 受制于: A0 + A1 + ... + AN = 1 A0 * V0 + A1 * V1 + ... + *的VN> = 0

我可以用有限数量的变量(例如3个)来做到这一点:

prob = LpProblem("Decision",LpMaximize)

a = list()
a.append(pulp.LpVariable("a0", 0, 1))
a.append(pulp.LpVariable("a1", 0, 1))
a.append(pulp.LpVariable("a2", 0, 1))
u = np.array([1, 3, 2])
v = np.array([1, -1, 0])

prob += a[0]*u[0] + a[1]*u[1] + a[2]*u[2], "Expected Utility"

prob += a[0]+a[1]+a[2] == 1, "PercentagesSum"
prob += a[0]*v[0] + a[1]*v[1] + a[2]*v[2] >= 0, "MinimalOutcome"

但是我希望能够拥有动态数量的u.v.,我认为解决方案可能是使用LpVariable.dicts(),但我没有成功。

python linear-programming pulp
1个回答
2
投票

如果您的变量设置与您一样,作为列表中的变量对象(使用n=len(mylist),使用类似(list comprehension)的东西很自然:

prob += lpSum([a[i] * u[i] for i in range(n)]), "Expected Utility"

其他组件也是如此。当然,您也可以将变量保存在字典中并遵循类似dict的访问。

核心理念只是使用python的功能来收集你的数据和纸浆的lpSum来总结它。

© www.soinside.com 2019 - 2024. All rights reserved.