PythonでPuLPを使うと連立方程式を解くことができます。
2元連立方程式
まずはシンプルな2元連立方程式を解いてみます。
x + y = 5
2x – y = 4
import pulp
problem = pulp.LpProblem()
x = pulp.LpVariable("x")
y = pulp.LpVariable("y")
problem += x + y == 5
problem += 2 * x - y == 4
status = problem.solve()
print("Status", pulp.LpStatus[status])
print("x", x.value())
print("y", y.value())
problem = pulp.LpProblem()
x = pulp.LpVariable("x")
y = pulp.LpVariable("y")
problem += x + y == 5
problem += 2 * x - y == 4
status = problem.solve()
print("Status", pulp.LpStatus[status])
print("x", x.value())
print("y", y.value())
実行結果
Status Optimal
x 3.0
y 2.0
8元連立方程式
次は8元でやってみます。
4x1 + 2x2 + 3x3 + 3x4 + 2x5 + 3x6 + 4x7 + 2x8 = 26
2x1 + 3x2 + 2x3 + 2x4 + 4x5 + 2x6 + 4x7 + 2x8 = 13
3x1 + 4x2 + 4x3 + 4x4 + 2x5 + 3x6 + 2x7 + 3x8 = 0
4x1 + 2x2 + 3x3 + 4x4 + 4x5 + 4x6 + 2x7 + 4x8 = 20
2x1 + 3x2 + 2x3 + 2x4 + 3x5 + 2x6 + 3x7 + 4x8 = 5
3x1 + 4x2 + 4x3 + 3x4 + 2x5 + 4x6 + 3x7 + 2x8 = 5
4x1 + 2x2 + 3x3 + 3x4 + 2x5 + 4x6 + 2x7 + 4x8 = 17
2x1 + 3x2 + 2x3 + 2x4 + 1x5 + 3x6 + 2x7 + 2x8 = -6
import pulp
problem = pulp.LpProblem()
x1 = pulp.LpVariable("x1")
x2 = pulp.LpVariable("x2")
x3 = pulp.LpVariable("x3")
x4 = pulp.LpVariable("x4")
x5 = pulp.LpVariable("x5")
x6 = pulp.LpVariable("x6")
x7 = pulp.LpVariable("x7")
x8 = pulp.LpVariable("x8")
problem += 4 * x1 + 2 * x2 + 3 * x3 + 3 * x4 + 2 * x5 + 3 * x6 + 4 * x7 + 2 * x8 == 26
problem += 2 * x1 + 3 * x2 + 2 * x3 + 2 * x4 + 4 * x5 + 2 * x6 + 4 * x7 + 2 * x8 == 13
problem += 3 * x1 + 4 * x2 + 4 * x3 + 4 * x4 + 2 * x5 + 3 * x6 + 2 * x7 + 3 * x8 == 0
problem += 4 * x1 + 2 * x2 + 3 * x3 + 4 * x4 + 4 * x5 + 4 * x6 + 2 * x7 + 4 * x8 == 20
problem += 2 * x1 + 3 * x2 + 2 * x3 + 2 * x4 + 3 * x5 + 2 * x6 + 3 * x7 + 4 * x8 == 5
problem += 3 * x1 + 4 * x2 + 4 * x3 + 3 * x4 + 2 * x5 + 4 * x6 + 3 * x7 + 2 * x8 == 5
problem += 4 * x1 + 2 * x2 + 3 * x3 + 3 * x4 + 2 * x5 + 4 * x6 + 2 * x7 + 4 * x8 == 17
problem += 2 * x1 + 3 * x2 + 2 * x3 + 2 * x4 + 1 * x5 + 3 * x6 + 2 * x7 + 2 * x8 == -6
status = problem.solve()
print("Status", pulp.LpStatus[status])
print("x1", x1.value())
print("x2", x2.value())
print("x3", x3.value())
print("x4", x4.value())
print("x5", x5.value())
print("x6", x6.value())
print("x7", x7.value())
print("x8", x8.value())
problem = pulp.LpProblem()
x1 = pulp.LpVariable("x1")
x2 = pulp.LpVariable("x2")
x3 = pulp.LpVariable("x3")
x4 = pulp.LpVariable("x4")
x5 = pulp.LpVariable("x5")
x6 = pulp.LpVariable("x6")
x7 = pulp.LpVariable("x7")
x8 = pulp.LpVariable("x8")
problem += 4 * x1 + 2 * x2 + 3 * x3 + 3 * x4 + 2 * x5 + 3 * x6 + 4 * x7 + 2 * x8 == 26
problem += 2 * x1 + 3 * x2 + 2 * x3 + 2 * x4 + 4 * x5 + 2 * x6 + 4 * x7 + 2 * x8 == 13
problem += 3 * x1 + 4 * x2 + 4 * x3 + 4 * x4 + 2 * x5 + 3 * x6 + 2 * x7 + 3 * x8 == 0
problem += 4 * x1 + 2 * x2 + 3 * x3 + 4 * x4 + 4 * x5 + 4 * x6 + 2 * x7 + 4 * x8 == 20
problem += 2 * x1 + 3 * x2 + 2 * x3 + 2 * x4 + 3 * x5 + 2 * x6 + 3 * x7 + 4 * x8 == 5
problem += 3 * x1 + 4 * x2 + 4 * x3 + 3 * x4 + 2 * x5 + 4 * x6 + 3 * x7 + 2 * x8 == 5
problem += 4 * x1 + 2 * x2 + 3 * x3 + 3 * x4 + 2 * x5 + 4 * x6 + 2 * x7 + 4 * x8 == 17
problem += 2 * x1 + 3 * x2 + 2 * x3 + 2 * x4 + 1 * x5 + 3 * x6 + 2 * x7 + 2 * x8 == -6
status = problem.solve()
print("Status", pulp.LpStatus[status])
print("x1", x1.value())
print("x2", x2.value())
print("x3", x3.value())
print("x4", x4.value())
print("x5", x5.value())
print("x6", x6.value())
print("x7", x7.value())
print("x8", x8.value())
実行結果
Status Optimal
x1 8.0
x2 -7.0
x3 6.0
x4 -5.0
x5 4.0
x6 -3.0
x7 2.0
x8 -1.0


コメント