Python: проблема балансировки сборки, как добавить индекс с предложением - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь реализовать проблему балансировки конвейера до Python.

Вот некоторые из ограничений

Моя переменная x является двоичной. Я для задач и J для рабочих станций. Если задача i назначена станции jx [i, j], то 1, иначе это 0.

У меня проблема с номером ограничения (5). Это ограничение для приоритетности задач. Именно поэтому приоритет задачи не будет на следующих станциях. Я не знаю, как я могу кодировать это в Python. Вот весь мой код. Пожалуйста помоги. Заранее спасибо.

import pulp
import random

#parameteers
n = 12
m = 5
i=range(1,12)
j=range(1,5)

set_I = range(1, n+1)
set_J = range(1, m+1)

A=[3,6,7,6,4,8,9,2,11,4,2,3]
p=[(),(1),(1),(2),(2),(2,3),(3),(5,6),(6,7),(4,5,8),(8,11),(9,10)]
b={(i,j): random.normalvariate(0,5) for i in set_I for j in set_J}
t = pulp.OrderedDict({i: A[i-1] for i in set_I})
P = pulp.OrderedDict({i: p[i-1] for i in set_I})


U=3
# Model
opt_mod = pulp.LpProblem(name="Binary_model", sense=pulp.LpMinimize)

# Variables from a dictionary
x_vars = pulp.LpVariable.dicts("x", b.keys(), cat=pulp.LpBinary)
y_vars = pulp.LpVariable.dicts("y", t.keys(), cat=pulp.LpBinary)
#z_vars=pulp.LpVariable.dicts("z",t.keys(),cat=pulp.LpBinary)
if x_vars==0 or y_vars==0:
    z_vars=0
else:
    z_vars=1
C = pulp.LpVariable("C",cat=pulp.LpInteger)
if x_vars==1 and y_vars==1:
    a=2
else:
    if x_vars==0 and y_vars==0:
        a=0
    else:
        a=1
if y_vars==1:
    y1=1
else:
    y1=0
# Constraints
for j in set_J:       
    opt_mod += pulp.lpSum(x_vars[i,j] for i in set_I) >= 1  #3#
    opt_mod += pulp.lpSum(x_vars[i,j] for i in set_I)  <=2   #4#
    #opt_mod += pulp.lpSum(x_vars[i,j] for i in set_I)  <=pulp.lpSum(x_vars[p,n] for p in P)  #5#
    opt_mod += (pulp.lpSum(x_vars[i,j] for i in set_I)) -(1) == y1 #9#
for i in set_I:        
    opt_mod += pulp.lpSum(z_vars*(0.5)* t[i])+ \
              pulp.lpSum((((x_vars[i,j])-(z_vars))*t[i]) for j in set_J) <= C   #6#
    opt_mod += ((z_vars)-a) >= (-1.5)  #7#
    opt_mod += ((1.5*z_vars)-a) <= 0  #8#
    opt_mod += pulp.lpSum(y_vars[i]) <= U #10#
    opt_mod += C >= 0 #13#
#objectives
    opt_mod += C

# Solve
opt_mod.solve()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...