Я изучаю цикличность симплексного метода. Я знаю, что существует лексикографическое правило, предотвращающее зацикливание симплексного метода, и я также знаю, что это правило следует применять к лексикографически допустимой симплексной таблице (это таблица, в которой первые ненулевые коэффициенты положительны). Но я знаю, что есть способ зациклить лексикографический симплексный метод, для этого нужно выбрать соответствующую лексикографически недействительную симплексную таблицу. Помогите, пожалуйста, с задачей найти такую таблицу (я также знаю, что как минимум такая таблица имеет размерность 3 (ограничения) на 7 (переменные))
Я пытался найти такую таблицу итерацией (с учетом того, что такая таблица начинается с 3 ограничений и 7 переменных). В идеале я рассчитываю получить такую таблицу.
У меня есть такой код:
import pandas as pd
import copy
import math
pd.set_option('display.max_colwidth', None)
pd.set_option('display.max_columns', None)
pd.set_option('display.width', None)
Bi = [1, 0, 0]
vectorC = [0, 0, 0, 2.2361, -2, 0, -4, -3.6180, -3.236, -3.6180, -0.764]
coeficients_Aij = [
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 0.3090, -0.6180, -0.8090, -0.3820, 0.8090, 0.3820, 0.3090, 0.6180],
[0, 0, 1, 1.4635, 0.3090, 1.4635, -0.8090, -0.9045, -0.8090, 0.4635, 0.309],
]
def is_Lexicographic(matrix):
flag = True
for i in matrix:
for j in i:
if j == 0:
continue
elif j > 0:
break
elif j < 0:
return False
return flag
spCol = []
strNum = len(Bi)
xNum = len(coeficients_Aij[0])
spBasises = []
spBasises.append([i for i in range(xNum - strNum + 1, xNum + 1)])
spCol.append("_X_")
for i in range(xNum):
spCol.append(f"X{i + 1}")
def isclose(a, b, rel_tol=1e-09, abs_tol=0.0):
return abs(a-b) 0:
count += 1
if count == 0:
print("FLAG")
print(matrix_Aij[0][0])
print(matrix_Aij[strNum][xNum])
return False
return True
def reverseC(vectorC):
result = []
for i in vectorC:
result.append(-i)
return result
print("START TABLE:")
symplex_Table = coeficients_Aij
symplex_Table.insert(strNum, reverseC(vectorC))
symplex_Table[strNum].insert(0, 0)
for i in range(strNum):
symplex_Table[i].insert(0, Bi[i])
init_Symplex_Table = pd.DataFrame(columns=spCol, data=symplex_Table)
print(init_Symplex_Table)
def lexicSymplexMethod(matrix_Aij):
Max_Xj = 0
Max_Yi = 0
if not(isTableValide(matrix_Aij)):
print("There is no solution due to the unlimited function")
return 1
while matrix_Aij[strNum][Max_Xj] >= 0:
Max_Xj += 1
if Max_Xj > xNum:
print('FIND OPTIMAL SOLUTION')
return [matrix_Aij, 2]
for Xj in range(Max_Xj, xNum + 1):
flag = True
c = 1
if abs(matrix_Aij[strNum][Xj]) > abs(matrix_Aij[strNum][Max_Xj]) and matrix_Aij[strNum][Xj] != 0 and \
matrix_Aij[strNum][Xj] < 0:
while c = 0):
flag = False
break
c = c + 1
if flag:
Max_Xj = Xj
#while matrix_Aij[Max_Yi][Max_Xj] strNum:
print("There is no solution due to the unlimited function")
return 1
for Yi in range(strNum + 1):
if matrix_Aij[Yi][Max_Xj] 0 and abs(matrix_Aij[Yi][0] / matrix_Aij[Yi][Max_Xj]) < abs(
matrix_Aij[Max_Yi][0] / matrix_Aij[Max_Yi][Max_Xj]):
Max_Yi = Yi
if matrix_Aij[Yi][Max_Xj] > 0 and abs(matrix_Aij[Yi][0] / matrix_Aij[Yi][Max_Xj]) == abs(
matrix_Aij[Max_Yi][0] / matrix_Aij[Max_Yi][Max_Xj]):
for i in range(1, strNum + 1):
if matrix_Aij[Yi][Max_Xj] > 0 and abs(matrix_Aij[Yi][i] / matrix_Aij[Yi][Max_Xj]) == abs(
matrix_Aij[Max_Yi][i] / matrix_Aij[Max_Yi][Max_Xj]):
pass
if matrix_Aij[Yi][Max_Xj] > 0 and abs(matrix_Aij[Yi][i] / matrix_Aij[Yi][Max_Xj]) < abs(
matrix_Aij[Max_Yi][i] / matrix_Aij[Max_Yi][Max_Xj]):
Max_Yi = Yi
break
Copy_matrix_Aij = copy.deepcopy(matrix_Aij)
for Yi in range(strNum + 1):
for Xj in range(xNum + 1):
if Yi == Max_Yi:
Copy_matrix_Aij[Yi][Xj] = matrix_Aij[Yi][Xj] / matrix_Aij[Max_Yi][Max_Xj]
if Yi != Max_Yi:
Copy_matrix_Aij[Yi][Xj] = matrix_Aij[Yi][Xj] - matrix_Aij[Max_Yi][Xj] * matrix_Aij[Yi][Max_Xj] / \
matrix_Aij[Max_Yi][Max_Xj]
return Copy_matrix_Aij
iterated_Symplex_Table = copy.deepcopy(symplex_Table)
i = 0
while True:
print(f"Iteration № {i}")
i += 1
outCurrent_Symplex_Table = pd.DataFrame(columns=spCol, data=iterated_Symplex_Table)
print(outCurrent_Symplex_Table)
print()
print()
print()
iterated_Symplex_Table = lexicSymplexMethod(iterated_Symplex_Table)
if iterated_Symplex_Table == 1:
print("NO SOLUTION!!!")
break
if len(iterated_Symplex_Table) == 2 and iterated_Symplex_Table[1] == 2:
print('FIND OPTIMAL SOLUTION')
break
На самом деле задача состоит в том, чтобы выбрать в переменных такие значения: coeficients_Aij, Bi, VectorC, чтобы программа зациклилась
При попытке Чтобы найти ответ на этот вопрос, я опирался на следующие источники:
теория симплексных алгоритмов;
теория лексикографического симплексного метода;
Визуализация циклы в симплекс-методе - для понимания и представления процесса зацикливания;
здесь пример кода и пример реализации обычного симплекс-метода и лексикографического симплекс-метода и принцип их работы операция объяснена
Я изучаю цикличность симплексного метода. Я знаю, что существует лексикографическое правило, предотвращающее зацикливание симплексного метода, и я также знаю, что это правило следует применять к лексикографически допустимой симплексной таблице (это таблица, в которой первые ненулевые коэффициенты положительны). Но я знаю, что есть способ зациклить лексикографический симплексный метод, для этого нужно выбрать соответствующую лексикографически недействительную симплексную таблицу. Помогите, пожалуйста, с задачей найти такую таблицу (я также знаю, что как минимум такая таблица имеет размерность 3 (ограничения) на 7 (переменные)) Я пытался найти такую таблицу итерацией (с учетом того, что такая таблица начинается с 3 ограничений и 7 переменных). В идеале я рассчитываю получить такую таблицу. У меня есть такой код: [code]import pandas as pd import copy import math
if not(isTableValide(matrix_Aij)): print("There is no solution due to the unlimited function") return 1
while matrix_Aij[strNum][Max_Xj] >= 0: Max_Xj += 1 if Max_Xj > xNum: print('FIND OPTIMAL SOLUTION') return [matrix_Aij, 2] for Xj in range(Max_Xj, xNum + 1): flag = True c = 1 if abs(matrix_Aij[strNum][Xj]) > abs(matrix_Aij[strNum][Max_Xj]) and matrix_Aij[strNum][Xj] != 0 and \ matrix_Aij[strNum][Xj] < 0: while c = 0): flag = False break c = c + 1 if flag: Max_Xj = Xj #while matrix_Aij[Max_Yi][Max_Xj] strNum: print("There is no solution due to the unlimited function") return 1 for Yi in range(strNum + 1): if matrix_Aij[Yi][Max_Xj] 0 and abs(matrix_Aij[Yi][0] / matrix_Aij[Yi][Max_Xj]) < abs( matrix_Aij[Max_Yi][0] / matrix_Aij[Max_Yi][Max_Xj]): Max_Yi = Yi if matrix_Aij[Yi][Max_Xj] > 0 and abs(matrix_Aij[Yi][0] / matrix_Aij[Yi][Max_Xj]) == abs( matrix_Aij[Max_Yi][0] / matrix_Aij[Max_Yi][Max_Xj]): for i in range(1, strNum + 1): if matrix_Aij[Yi][Max_Xj] > 0 and abs(matrix_Aij[Yi][i] / matrix_Aij[Yi][Max_Xj]) == abs( matrix_Aij[Max_Yi][i] / matrix_Aij[Max_Yi][Max_Xj]): pass if matrix_Aij[Yi][Max_Xj] > 0 and abs(matrix_Aij[Yi][i] / matrix_Aij[Yi][Max_Xj]) < abs( matrix_Aij[Max_Yi][i] / matrix_Aij[Max_Yi][Max_Xj]): Max_Yi = Yi break Copy_matrix_Aij = copy.deepcopy(matrix_Aij) for Yi in range(strNum + 1): for Xj in range(xNum + 1): if Yi == Max_Yi: Copy_matrix_Aij[Yi][Xj] = matrix_Aij[Yi][Xj] / matrix_Aij[Max_Yi][Max_Xj] if Yi != Max_Yi: Copy_matrix_Aij[Yi][Xj] = matrix_Aij[Yi][Xj] - matrix_Aij[Max_Yi][Xj] * matrix_Aij[Yi][Max_Xj] / \ matrix_Aij[Max_Yi][Max_Xj] return Copy_matrix_Aij
iterated_Symplex_Table = copy.deepcopy(symplex_Table) i = 0 while True: print(f"Iteration № {i}") i += 1 outCurrent_Symplex_Table = pd.DataFrame(columns=spCol, data=iterated_Symplex_Table) print(outCurrent_Symplex_Table) print() print() print() iterated_Symplex_Table = lexicSymplexMethod(iterated_Symplex_Table) if iterated_Symplex_Table == 1: print("NO SOLUTION!!!") break if len(iterated_Symplex_Table) == 2 and iterated_Symplex_Table[1] == 2: print('FIND OPTIMAL SOLUTION') break
[/code] На самом деле задача состоит в том, чтобы выбрать в переменных такие значения: coeficients_Aij, Bi, VectorC, чтобы программа зациклилась При попытке Чтобы найти ответ на этот вопрос, я опирался на следующие источники:
теория симплексных алгоритмов;
теория лексикографического симплексного метода;
Визуализация циклы в симплекс-методе - для понимания и представления процесса зацикливания;
здесь пример кода и пример реализации обычного симплекс-метода и лексикографического симплекс-метода и принцип их работы операция объяснена
Я изучаю Python на базовом уровне. У меня есть путаница по поводу влияния и применения лексикографического порядка при сортировке многомерного списка. Будет очень любезно, если мне помогут уважаемые старшие. Спасибо!
a = [ , , ]
b = sorted(a,...
Я работаю над задачей кода Python3, в которой сообщение кодируется или декодируется в порядке перетасовки стандартной игральной колоды из 52 карт. Я уже нашел, как закодировать сообщение, но у меня возникли трудности с обращением функции для...
Если у меня есть класс, который я хочу иметь возможность сортировать (т.е. поддерживать концепцию «меньше чем»), и он имеет несколько элементов данных, поэтому мне нужно выполнить лексикографическое упорядочение, тогда мне нужно что-то вроде этого:...
класс Base { публика: База() { Фу(); связывать(); } виртуальная пустота foo() { std::cout fn вызывает foo в классе Derived? Мой компилятор — Apple clang версии 14.0.3
Уже несколько дней у меня возникла проблема с моей Java-программой. Я пытаюсь получить доступ к artID, который определен внутри метода updateResultDisplay. Каждый раз, когда я переключаю результаты, я получаю новый идентификатор, отображаемый на...