def solve1(self, A, A_sub, b, c, c_sub): sim = simplex(A, A_sub, b, c, c_sub) table = sim.createtable() table = sim.phrase1(table) if table is None: print("No solution Phrase 1") return None, None, None for i in range(len(table)): table[i][1] = c[int(table[i][0])] print("Phase 2:") table = sim.phrase2(table) if table is None: print("No solution Phrase 2") return None, None, None obj = np.sum(table[:, 1] * table[:, 2]) print("Obj = ", Fraction(obj).limit_denominator(100)) result = np.zeros((len(table))) for i in range(len(table)): result[i] = table[i][2] if table is None: print("None") else: for i in range(len(result)): print("X[" + str(int(i)), "] = ", Fraction(result[i]).limit_denominator(100), end=", ") for i in range(len(table)): for j in range(1, len(table[i])): table[i][j] = Fraction(table[i][j]).limit_denominator(100) return result, table, obj
def main(): ##Nhap du lieu A, b, c = readInput() ##Xay dung bai toan phu #them slack var A_sub = np.hstack((A, np.eye(len(A)))) #Ham muc tieu cho bai toan phu c_sub = np.zeros((len(c)+len(A))) for i in range(len(c), len(c) + len(A)): c_sub[i] = -1 c_gomory = np.hstack((c, [0])) #Phrase 1 print("Phase 1:") sim = simplex(A, A_sub, b, c, c_sub, c_gomory) table = sim.createtable() table = sim.phrase1(table) for i in range(len(table)): table[i][1] = c[int(table[i][0])] print() ##Phrase 2 print("Phase 2:") table = sim.phrase2(table) ##Ket qua sau 2 pha obj = np.sum(table[:, 1]*table[:, 2]) print("Obj = ", Fraction(obj).limit_denominator(100)) result = np.zeros((len(A[0]))) for i in range (len(table)): result[i] = table[i][2] for i in range (len(result)): print("X"+str(i), "=", Fraction(result[i]).limit_denominator(100)) for i in range(len(table)): for j in range (1, len(table[i])): table[i][j] = Fraction(table[i][j]).limit_denominator(100) ##Gomory-cut cho 1 bien table, cut = gomory_cut(table) if cut == True: table = sim.dualSimplex(table) obj = np.sum(table[:, 1]*table[:, 2]) print("Obj = ", Fraction(obj).limit_denominator(100)) result = np.zeros((len(A[0]))) for i in range (len(table)): if (i < len(A[0])): result[i] = table[i][2] for i in range (len(result)): print("X"+str(i), "=", Fraction(result[i]).limit_denominator(100), end = ' ')
def solve2(self, A, A_sub, b, c, c_sub): # Run Phrase Nhanh can # Phrase 1 sim = simplex(A, A_sub, b, c, c_sub) table = sim.createtable() table = sim.phrase1(table) if table is None: print("No solution Phrase 1") return None, None, None for i in range(len(table)): table[i][1] = c[int(table[i][0])] print() # Phrase 2 print("Phase 2:") table = sim.phrase2Min(table) if table is None: print("No solution Phrase 2") return None, None, None ##Ket qua sau 2 pha obj = np.sum(table[:, 1] * table[:, 2]) print("Obj = ", Fraction(obj).limit_denominator(100)) result = np.zeros((len(table))) for i in range(len(table)): result[i] = table[i][2] if table is None: print("******") else: for i in range(len(result)): print("X" + str(i), "=", Fraction(result[i]).limit_denominator(100)) for i in range(len(table)): for j in range(1, len(table[i])): table[i][j] = Fraction(table[i][j]).limit_denominator(100) return result, table, obj