Форум сайта python.su
0
def T_task(Z, U, C, addition):
X = [ for i in Z]
max_el = max() + 1
plan_ready = 0
while plan_ready==0:
min_el = max_el
min_i = -1
min_j = -1
for i in range(0, len(Z)):
for j in range(0, len(U)):
if X==0 and C < min_el:
min_el = C
min_i = i
min_j = j
X = min(Z, U)
Z -= X
U -= X
if Z == 0:
X = ]
if U == 0:
for i in X:
i = (-1 if i==0 else i)
plan_ready = 1
for i in X:
for j in i:
if j==0:
plan_ready = 0
for i in range(0, len(Z)):
for j in range(0, len(U)):
if X == -1:
X = 0
#Начальный план найден
while True:
#Определяем потенциалы
A =
B =
A = 0
not_zero_elems = 0
for i in range(0, len(Z)):
for j in range(0, len(U)):
if X != 0:
not_zero_elems += 1
epsilons = len(A)+len(B)-1-not_zero_elems
def set_betas(i):
nonlocal epsilons
potencials_seted = 0
for j in range(0, len(C)):
if X!=0 and B==None:
B = C - A
set_alphas(j)
potencials_seted += 1
if potencials_seted==0 and epsilons>0:
for j in reversed(range(0, len(C))):
if X==0:
X = ‘e’
epsilons -= 1
B = C - A
set_alphas(j)
break
def set_alphas(j):
nonlocal epsilons
potencials_seted = 0
for i in range(0, len(C)):
if X!=0 and A==None:
A = C - B
set_betas(i)
potencials_seted += 1
if potencials_seted==0 and epsilons>0:
for i in reversed(range(0, len(C))):
if X==0:
X = ‘e’
epsilons -= 1
A = C - B
set_betas(i)
break
set_betas(0)
#Потенциалы определены
#Подсчитываем псевдостоимость и определяем оптимален ли план
pC = [ for i in A]
start_i = -1
start_j = -1
for i in range(0, len(Z)):
for j in range(0, len(U)):
if pC>C:
start_i=i
start_j=j
if start_i == -1:
L = 0
for i in range(0, len(Z)-addition):
for j in range(0, len(U)):
if X!='e':
L += X*C
else:
X = 0
return (L, X)
#Цикл пересчёта
def cicle_gor(points):
i, j_was = points
for j in range(0, len(X)):
if i == start_i and j == start_j:
return points.copy()
if j!=j_was and X!=0:
cicle = cicle_vert(points.copy()+)
if cicle != None:
return cicle
return None
def cicle_vert(points):
i_was, j = points
for i in range(0, len(X)):
if i == start_i and j == start_j:
return points.copy()
if i!=i_was and X!=0:
cicle = cicle_gor(points.copy()+)
if cicle != None:
return cicle
return None
cicle = cicle_gor()
#Цикл найден
#Пересчитываем таблицу
o = min([ X for i,j in cicle ])
for i,j in cicle:
X+=o
for i,j in cicle:
X-=o
#Таблица пересчитанна
def ui():
Z_num = int(input('Введите колличество районов производства:'))
Z =
for i in range(Z_num):
Z.append(int(input('Введите объём производства ‘+str(i+1)+’-го района:')))
P_num = int(input('Введите колличество пунктов потребления:'))
P =
for j in range(P_num):
P.append(int(input('Введите объём потребления ‘+str(j+1)+’-го пункта:')))
C = [ for i in Z]
for i in range(len(Z)):
for j in range(len(P)):
C = int(input('Введите затраты на перевозку из ‘+
str(i+1)+’-го района в ‘+
str(j+1)+’-й пункт:'))
r=
for j in range(len(P)):
r.append(int(input('Введите величину ущерба из-за невыполнения запроса ‘+str(j+1)+’-го пункта:')))
C.append(r)
Z.append(5)
L, X = T_task(Z, P, C, 1)
print('Издержки: ‘+str(L))
print(’Оптимальный план:')
for i in range(Z_num):
for j in range(P_num):
print(str(X) + ‘ единиц объёма ’+
str(i+1)+'-го района перевезти в ‘+
str(j+1)+’-й пункт')
for j in range(P_num):
u = X
if u=='e':
u=0
print('Ущерб из-за невыполнения запроса ‘+str(j+1)+’-го пункта:'+str(u))
ui()
#P = #производительность
#Z = #план
#C = [ ,
# ,
# ,
# ]
вот ошибка которую выдает,НО выдает при введение каких то определенных данных,такое чувство что выше какого-то порога
Python 3.4.2 (v3.4.2:ab2c023a9432, Oct 6 2014, 22:15:05) on win32
Type “copyright”, “credits” or “license()” for more information.
>>> ================================ RESTART ================================
>>>
Введите колличество районов производства:3
Введите объём производства 1-го района:2
Введите объём производства 2-го района:1
Введите объём производства 3-го района:2
Введите колличество пунктов потребления:1
Введите объём потребления 1-го пункта:8
Введите затраты на перевозку из 1-го района в 1-й пункт:2
Введите затраты на перевозку из 2-го района в 1-й пункт:2
Введите затраты на перевозку из 3-го района в 1-й пункт:1
Введите величину ущерба из-за невыполнения запроса 1-го пункта:1
Traceback (most recent call last):
File “C:\Users\Александр\Downloads\kurs.py”, line 215, in <module>
ui()
File “C:\Users\Александр\Downloads\kurs.py”, line 197, in ui
L, X = T_task(Z, P, C, 1)
File “C:\Users\Александр\Downloads\kurs.py”, line 106, in T_task
pC = [ for i in A]
File “C:\Users\Александр\Downloads\kurs.py”, line 106, in <listcomp>
pC = [ for i in A]
File “C:\Users\Александр\Downloads\kurs.py”, line 106, in <listcomp>
pC = [ for i in A]
TypeError: unsupported operand type(s) for +: ‘NoneType’ and ‘int’
>>>
Офлайн
26
Надо обратить код в теги. без этого сложно понять
Офлайн
39
Транспортная задача. Эх молодость, молодость 
Офлайн