0

I am trying to solve a simple simplex tableau using the python library scipy.

c = [7, 9, 18, 17]
A = [
    [2, 4, 5, 7],
    [ 1, 1, 2, 2],
    [ 1, 2, 3, 3]
]
b = [42, 17, 24]

from scipy.optimize import linprog

print(linprog(c, A, b, method='simplex'))

According to this course from the University Le Havre where this example tableau was used to introduce the simplex method, I should be getting [3,0,7,0] for the variables and 147 for the minimized function.

Instead, I get [0,0,0,0] and 0.

NEWO-o
  • 1
  • 4

1 Answers1

1

The optimisation sense of your problem setup is incorrect. linprog assumes minimisation but the textbook asks for maximization. Invert the sign of c and the problem succeeds:

import numpy as np
from scipy.optimize import linprog

c = -np.array((7, 9, 18, 17))
A = [
    [2, 4, 5, 7],
    [1, 1, 2, 2],
    [1, 2, 3, 3]
]
b = [42, 17, 24]


result = linprog(c=c, A_ub=A, b_ub=b, method='highs')
print(result)
        message: Optimization terminated successfully. (HiGHS Status 7: Optimal)
        success: True
         status: 0
            fun: -147.00000000000006
              x: [ 3.000e+00  0.000e+00  7.000e+00  0.000e+00]
            nit: 4
          lower:  residual: [ 3.000e+00  0.000e+00  7.000e+00  0.000e+00]
                 marginals: [ 0.000e+00  2.000e+00  0.000e+00  1.000e+00]
          upper:  residual: [       inf        inf        inf        inf]
                 marginals: [ 0.000e+00  0.000e+00  0.000e+00  0.000e+00]
          eqlin:  residual: []
                 marginals: []
        ineqlin:  residual: [ 1.000e+00  0.000e+00  0.000e+00]
                 marginals: [-0.000e+00 -3.000e+00 -4.000e+00]
 mip_node_count: 0
 mip_dual_bound: 0.0
        mip_gap: 0.0
Reinderien
  • 11,755
  • 5
  • 49
  • 77