Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import copy
- import math
- import numpy as np
- f = np.array([320, 290])
- X = np.array([
- [0.5, 0.2, 600],
- [0.2, 0.6, 870],
- [0.3, 0.2, 430]
- ])
- zv = [320, 290, 0, 0, 0] # 3 последние фиктивные
- bz = [0, 0, 0, 0, 0] # 2 последних фиктивные
- # f=np.array([3,2,0,0,0,0])
- # b=np.array([6,8,1,2])
- # data=np.array([
- # [0.5,0.2,1,0,0],
- # [0.2,0.6,0,1,0],
- # [0.3,0.2,0,0,1]
- # ])
- #
- # X=np.array([
- # [1,2,6],
- # [2,1,8],
- # [-1,1,1],
- # [0,1,2]
- # ])
- # zv=[3,2,0,0,0,0] # 2 последние фиктивные
- # bz=[0,0,0,0,0,0] # 2 последних фиктивные
- res = None
- np.set_printoptions(suppress=True)
- def ck(X, f, zv, bz):
- global res
- X = X.astype(float)
- k = np.array([X[:, i] @ bz[0:3] - zv[i] for i in range(X.shape[1])]) # скалярное произведение
- print(X)
- print(k[0:3])
- if k[0] >= 0 and k[1] >= 0: # больше 0, значит результат найден
- res = (np.round(X[:, -1], 3)[np.array(bz)[:3] > 0], np.round(k[-1], 3))
- return # нашли решение
- t = np.argmin(k) # разрешающий столбец
- ot = []
- for i in range(X.shape[0]): # поиск минимальной положительной строки
- if X[i][t] != 0:
- ot.append(X[i][2] / X[i][t])
- else:
- ot.append(1e6)
- if ot[-1] < 0:
- ot[-1] = 1e6
- s = np.argmin(ot) # разрешающая строка
- bz[s], zv[t] = zv[t], bz[s] # замена базизных элементов
- x = X[s][t] # разрешающий элемент
- A = copy.deepcopy(X)
- for i in range(X.shape[0]): # вычисление новых элементов на разрешающем столбце
- X[i][t] = A[i][t] / x * -1
- for i in range(X.shape[1]): # вычисление новых элементов на разрешающей строке
- X[s][i] = A[s][i] / x
- for i in range(X.shape[0]): # вычисление всех оставшихся элементов
- for j in range(X.shape[1]):
- if i == s or j == t:
- continue
- X[i][j] = (A[i][j] * A[s][t] - A[i][t] * A[s][j]) / x
- X[s][t] = 1 / x # перевычисление разрешающего элемента
- ck(X, f, zv, bz) # переход на следующуюю итерацию
- ck(X, f, zv, bz)
- print()
- if res[0][0] * f[0] + res[0][1] * f[1] != res[1]:
- print("x1 =", res[0][1], " ;", "x2 =", res[0][0], " ;", "f =", res[1])
- else:
- print("x1 =", res[0][0], " ;", "x2 =", res[0][1], " ;", "f =", res[1])
Advertisement
Add Comment
Please, Sign In to add comment