Exemple #1
0
    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
Exemple #2
0
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 = ' ')
Exemple #3
0
    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