【问题标题】:Linear Programming on PuLP with varying size arguments具有不同大小参数的纸浆线性规划
【发布时间】:2019-04-13 16:36:24
【问题描述】:

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

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

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

我想最大化:a0*u0+a1*u1+...+an*un
受制于:
a0+a1+...+an=1
a0*v0+a1*v1+...+an*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】:

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

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

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

    核心思想就是利用python的能力收集你的数据,pulp的lpSum总结一下。

    【讨论】:

      猜你喜欢
      • 2016-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 2016-04-14
      • 1970-01-01
      相关资源
      最近更新 更多