Как создать переменную, в которой один индекс зависит от значения другого индекса?
Привет, ребята. У меня возникла проблема с проблемой Python PulP MILP. Вы можете найти упрощенный код, который воспроизводит эту проблему здесь:
from pulp import * machines = 2 I = range(machines) positions = 2 J = range(positions) years = 10 T = range(years) age = {0: 5, 1: 7} IR = 0.06 df = 0.3 costs = {(0,0):300, (0,1):200, (1,0):500, (1,1):350} factor = {} finalcosts = {} for i in I: for j in J: for t in T: for k in range(age[i]): factor[t,k] = ((1-df)**k)/((1+IR)**t) finalcosts[i,j,t,k] = costs[i,j]*factor[t,k] prob = LpProblem("TrialProb",LpMinimize) Prob_vars = LpVariable.dicts("probvars", ((Machine, Position,Year, Age) for Machine in I for Position in J for Year in T for Age in range(age[i])),0,None, LpInteger)
Это дает мне переменную finalcosts размером 240, которая является тем, что я хочу, со всеми правильными значениями. Но "Prob_vars" имеют размер 260, считая второй индекс k для первого индекса i также. Это означает, что в то время как в "finalcosts" для i=0, k=0:4 и для i=2, k=0:6 (что я и хочу), для индекса переменной решения Prob_vars k=0:6 для обоих i=1 & i=2.
Я довольно новичок в Python, поэтому не могу понять, в чем заключается проблема.
Что я уже пробовал:
Я перепробовал все комбинации, которые мог придумать для различных выражений "Prob_vars", но ничего не работает должным образом. Например, вынимая выражения индексов из оператора variable:
for i in I: for j in J: for t in T: for Age in range(lifetime[i]): Prob_vars = LpVariable.dicts("probvars", ((Machine, Position,Year, Age), 0,None, LpInteger)
Я также искал в интернете все, что мог придумать, но не могу найти ответа на этот вопрос.