繁体   English   中英

在PuLP中使用四个维度设置目标功能

[英]Setup Objective function in PuLP with four dimensions

我正在尝试为在不同角色,工作日和轮班工作的员工建立日程安排优化。 我想根据时间表(分配矩阵)优化偏好得分。 但是,我在定义目标函数时遇到了麻烦。 我正在使用PuLP设置我的代码,这是我的设置:

from __future__ import print_function
import numpy as np
import pandas as pd
import pulp
from random import randint
from itertools import product

employees = range(11)
roles = range(5)
days = range(6)
shifts = range(3)

变量X是由0和1组成的赋值矩阵

X = pulp.LpVariable.dicts("X", product(employees, roles, days, shifts),
                          cat=pulp.LpBinary)

P是偏好分数

for k in employees:
    for j in roles:
        for i in days: 
            for h in nr_shifts:
                P[(k, j, i,h)] = np.random.rand() - 0.5

问题,使偏好分数最大化:

scheduling_problem = pulp.LpProblem("Employee Scheduling", pulp.LpMaximize)

和目标函数(导致错误)

scheduling_problem += (pulp.lpSum(X[(k, j, i, h)] * P[(k, j, i, h)])
        for k in employees for j in roles for i in days for h in shifts
)

运行目标函数后的错误:

TypeError: Can only add LpConstraintVar, LpConstraint, LpAffineExpression or True objects

我的目标是总结员工,职位,工作日和轮班的偏好得分,我认为将偏好得分乘以分配(简单地为0和1)即可解决问题。

有什么想法吗?

日Thnx

最后一条语句在Python中无效:检查括号。 您可能是说:

scheduling_problem += pulp.lpSum(X[(k, j, i, h)] * P[(k, j, i, h)]
        for k in employees for j in roles for i in days for h in shifts)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM