【问题标题】:How to introduce a variable in pulp environment of Python如何在 Python 的纸浆环境中引入变量
【发布时间】:2023-03-14 15:54:01
【问题描述】:

我有两套。

  • S = 来源 = {S1、S2、S3}
  • D = 目的地 = {D1、D2、D3}

我必须在某些限制条件下最小化总运输成本。我在 Python 中使用纸浆。 我怎样才能引入一个变量,以便我允许一些特定的路线?

条件是if cost $(S_i, D_j) >=$ 250 then 0 else 1

allowed_route = []
for i in range(len(matrix)):

for j in matrix[i]:
    if j >= 250:
        allowed_route.append(0)
    else:
        allowed_route.append(1)
 np_array=np.asarray(allowed_route)
 allowed_route = np_array.reshape(6, 4) 
 allowed_route = np.array(P_allowed_PLF_cap).tolist()

这样,我已经定义了参数,但是我无法引入变量。

【问题讨论】:

  • 您正在描述一种运输模式。目前尚不清楚您是否对如何声明纸浆变量或如何将问题设置为 LP 感到困惑。无论如何,这里有一个完整的例子:coin-or.org/PuLP/CaseStudies/a_transportation_problem.html
  • 我在问如何在参数有一些条件的情况下声明纸浆变量。我知道如何将问题设置为 LP。谢谢。

标签: python python-3.x optimization linear-programming pulp


【解决方案1】:

您应该制作具有合法路径的 S X D 变量的子集并使用它。这是一个例子:

In [4]: from pulp import *                                                      

In [5]: sources = {'S1', 'S2', 'S3'}                                            

In [6]: destinations = {'D1', 'D2', 'D3'}                                       

In [7]: legal_routes = ( ('S1', 'D2'), 
   ...:                  ('S2', 'D1') )                                         

In [8]: # note:  above is obviously infeasible...just shows idea...             

In [9]: route_select = LpVariable.dicts('route', legal_routes, 0, 1, LpBinary)

实际上,您可能对每条路线都有成本,所以我会将所有这些都保存在字典中,并将字典键发送到 LpVariable.dicts 调用

其余部分应该与我提到的示例类似。如果您遇到困难,如果您搜索“纸浆运输模型”或“纸浆稀疏约束”等,本网站上还有其他几个示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    • 2020-09-16
    • 2016-02-29
    • 1970-01-01
    • 2022-01-10
    • 2014-09-30
    • 1970-01-01
    相关资源
    最近更新 更多