簡體   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