纸浆多指标插件

PuLP-MiA的Python项目详细描述


PuLP MiA是一个多索引的纸浆插件。 创建它是为了简化多索引变量的工作 当形成约束和目标函数时。在

安装

安装pulp mia的最简单方法是通过PyPi

如果您的系统上有pip:

pip install pulp-mia

否则,请按照PyPi页面上的下载说明进行操作。在

纸浆MiA要求:
  • Python>;=3.4
  • PuLP>;=1.6.10(有关详细信息,请参阅PuLP自述文件)

示例

使用Task()创建新的LP任务。要使用名称MyTask并在调试模式下创建,请使用

^{pr2}$

调试模式更新任何更改的变量列表。 释放模式只在解决Lp问题之前更新。在

使用VariablesType标志设置变量类型

task = Task(VariablesType='Integer')     # Continuous, Integer, Boolean

连续是默认类型。在

要形成任务,请使用Constraint()类。在

创建目标函数(标准)使用

c = Constraint('MAX')     # 'MAX, 'MIN'

要设置旧变量或新变量的系数,请使用

c.setCoeff(('v'), 0.3)     # v-indicator with weight 0.3
c.setCoeff(('p'), 0.7)     # p-indicator with weight 0.7

设置任务使用的目标函数

task.setObjective(c)

要创建一些约束,请使用

a = Constraint('<=')      # '<=', '==', '>='

要设置旧变量或新变量的系数,请使用

# 50x11 + 100x12 + 50x21 + 100x22 <= 200
a.setCoeff(('x', 1, 1), 50)
a.setCoeff(('x', 1, 2), 100)
a.setCoeff(('x', 2, 1), 50)
a.setCoeff(('x', 2, 2), 100)

要设置a-constraint中所有变量的行组合和,请使用

a.setBValue(200)

设置任务使用限制

task.addConstraint(a)

让我们创建一个使用v-indicator和p-indicator的约束

a = Constraint('==')
a.setCoeff(('x', 1, 1), 1)
a.setCoeff(('x', 1, 2), 1)
a.setCoeff(('v'), -1)     # v = x11 + x12
task.addConstraint(a)

a = Constraint('==')
a.setCoeff(('x', 2, 1), 1)
a.setCoeff(('x', 2, 2), 1)
a.setCoeff(('p'), -1)     # p = x21 + x22
task.addConstraint(a)

运行自动求解器的纸浆和观察结果使用

from pprint import pprint

print(task)               # name & size of task
print(task.Plan)          # solve and show status & objective value
print('PLAN')
pprint(task.PDict)        # show the plan as a dict

一旦解决了计划就在这里。 默认情况下这里没有零变量。充分利用计划

pprint(task.Plan.getPDict(with_zeroe_values=True))

如果你要做一些修改(新的目标或约束),计划就会丢失。在

在求解之前,你可以得到矩阵式的任务元素

print('\nAMatrix')
pprint(task.AMatrix)
print('\nBVector')
pprint(task.BVector)
print('\nCVector')
pprint(task.CVector)

查看任务中生成的变量、状态和目标使用值

pprint(task._Variables)
print('\nStatus', task.Status)
print('\nObjective', task.PValue)

最后,要得到生成的纸浆问题,使用

prob = task.Prob

现在看看palp MiA如何解决一些分配问题

from itertools import product
from pprint import pprint

from pulp_mia import Task, Constraint

# SETS
i_set = list(range(5))
j_set = list(range(2))

m_set = list(range(2))
g_set = list(range(4))
s_set = list(range(5))
k_set = list(range(5))

t_zad = 0.3
t_s_set = [0.05*(s + 1) for s in s_set]

G = [1, 0.5, 0.36, 0.5]
k_set_var = [0.5*(k + 1) for k in k_set]

def get_p(k, g):
    return 1/(G[g]/(1.7*k_set_var[k]) + 1)

alfa_p = 0.5
alfa_v = 0.5

# task
task = Task(debug=True)

# Objective
c_new = Constraint('MAX')
c_new.setCoeff(('v'), alfa_v/len(i_set))
for i, j, m, g, s, k in product(i_set, j_set, m_set, g_set, s_set, k_set):
    c_new.setCoeff(('x', i, j, m, g, s, k), alfa_p*get_p(k, g)/(1/(min(G)/(1.7*max(k_set_var)) + 1)*len(i_set)))
task.setObjective(c_new)

# Constraints
# Constraint 1
for i, m, g, s, k in product(i_set, m_set, g_set, s_set, k_set):
    a_new = Constraint('<=')
    for j in j_set:
        a_new.setCoeff(('x', i, j, m, g, s, k), 1)
    a_new.setBValue(1)
    task.addConstraint(a_new)

# Constraint 1.5
for i in i_set:
    a_new = Constraint('<=')
    for j, m, g, s, k in product(j_set, m_set, g_set, s_set, k_set):
        a_new.setCoeff(('x', i, j, m, g, s, k), 1)
    a_new.setBValue(1)
    task.addConstraint(a_new)

# Constraint 2
for i, j in product(i_set, j_set):
    a_new = Constraint('<=')
    for m, g, s, k in product(m_set, g_set, s_set, k_set):
        a_new.setCoeff(('x', i, j, m, g, s, k), 1)
    a_new.setBValue(1)
    task.addConstraint(a_new)

# Constraint 3
for j in j_set:
    a_new = Constraint('<=')
    for i, m, g, s, k in product(i_set, m_set, g_set, s_set, k_set):
        a_new.setCoeff(('x', i, j, m, g, s, k), t_s_set[s])
    a_new.setBValue(t_zad)
    task.addConstraint(a_new)

# Constraint 4
a_new = Constraint('==')
for i, j, m, g, s, k in product(i_set, j_set, m_set, g_set, s_set, k_set):
    a_new.setCoeff(('x', i, j, m, g, s, k), 1)
a_new.setCoeff(('v'), -1)
a_new.setBValue(0)
task.addConstraint(a_new)


print(task)
print(task.Plan)
print('PLAN')
pprint(task.PDict)

版权所有Dmitriy A.Pavlov(dpavlov239@mail.ru)麻省理工学院授权

有关版权信息,请参阅许可证文件。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何从IBM MQ的JMSException检测可恢复错误   java Lucene6。4.2:找不到类,尝试添加查询。   Java Pdf差异库   在Java中多线程处理我的线程   java将字符串传递给Uri。下载中的parse()   java在列表中查找原语位置   java JPA条件从另一个查询中选择   java中的强制转换和转换   java如何在没有上下文的情况下获取SOAP Web服务(Apache Axis 1.4)的调用客户端的IP地址   java Android IllegalBlockSizeException:解密中最后一个块未完成   java Jersey是否要自定义无效资源路径的错误处理?   如何将JavaCVS web项目转换为基于maven的web项目?   java如何检查通用列表是否与jUnit相等?   arraylist java。util。尝试使用迭代器时发生ConcurrentModificationException错误   使用springsecurity,jsp上的java${u csrf.token}始终为空   sql使用java从临时表中选择数据   spring验证中的java@Notnull和@Pattern无效   java如何使用jQuery将包含对象数组的对象数组传递给Spring MVC控制器?