[0,1]中的系统解

问题描述 投票:0回答:1

我有一个如下所示的方程组:

"L3 + L4 + S5 + S12 + L1 + D4 + L8 + S3 + L7 + D8 + D5 + L5 == 1",
"L4 + D9 + S5 + L1 + D16 + L8 + L6 + S8 + L7 + D8 == 1",
"L4 + L1 + D16 + S60 + L2 == 1",
"L3 + D12 + L1 + S9 + S3 + D5 + S105 + L2 + L7 + D28 + L5 == 1",
"S11 + L3 + S72 + D10 + D72 + D9 + S5 + D16 + S9 + S60 + L6 + S105 + L2 + L8 + D5 == 1",
"L3 + S60 + L2 + L4 == 1",
"D72 + L6 + S105 + L7 + D28 + L5 == 1",
"S72 + D72 + L8 + L6 + L5 == 1",
"D4 + S12 + S11 + D10 == 1",
"D12 + D10 + S9 + S8 + D8 + S12 == 1",
"S11 + D12 + S72 + D9 + D4 + S3 + S8 + D28 == 1",
"S11 + D12 + D10 + D72 + D9 + D28 + S72 + S5 + S12 + D4 + D16 + S9 + S3 + S60 + S8 + S105 + D8 + D5 == 1"

我需要所有可能的解决方案,其中解决方案在 [0 或 1] 中 解决方案如下: S1 = [L3,D12,S9] S2 = [L4, D72, S8] 解决方案应采用 L、D 和 S 中的元素。 我需要在 python 上编写这段代码,并且我试图将方程系统建模为矩阵: M_L*L + M_D*D + M_S*S = 个 但没有编码的提示。 有人可以帮忙吗?

我尝试过循环,但实现起来并不容易。我也尝试了图书馆 sympy: 这是我的代码 问题是我没有解决方案的组合,应该添加约束

from sympy import symbols, Eq, solve

L1, L2, L3, L4, L5, L6, L7, L8, S3, S5, S8, S9, S11, S12, S60, S72, S105, D4, D5, D8, D9, D10, D12, D16, D28, D72 = symbols('L1 L2 L3 L4 L5 L6 L7 L8 S3 S5 S8 S9 S11 S12 S60 S72 S105 D4 D5 D8 D9 D10 D12 D16 D28 D72', boolean=True)


eq1 = Eq(L3 + L4 + S5 + S12 + L1 + D4 + L8 + S3 + L7 + D8 + D5 + L5, 1)
eq2 = Eq(L4 + D9 + S5 + L1 + D16 + L8 + L6 + S8 + L7 + D8, 1)
eq3 = Eq(L4 + L1 + D16 + S60 + L2, 1)
eq4 = Eq(L3 + D12 + L1 + S9 + S3 + D5 + S105 + L2 + L7 + D28 + L5, 1)
eq5 = Eq(S11 + L3 + S72 + D10 + D72 + D9 + S5 + D16 + S9 + S60 + L6 + S105 + L2 + L8 + D5, 1)
eq6 = Eq(L3 + S60 + L2 + L4, 1)
eq7 = Eq(D72 + L6 + S105 + L7 + D28 + L5, 1)
eq8 = Eq(S72 + D72 + L8 + L6 + L5, 1)
eq9 = Eq(D4 + S12 + S11 + D10, 1)
eq10 = Eq(D12 + D10 + S9 + S8 + D8 + S12, 1)
eq11 = Eq(S11 + D12 + S72 + D9 + D4 + S3 + S8 + D28, 1)
eq12 = Eq(S11 + D12 + D10 + D72 + D9 + D28 + S72 + S5 + S12 + D4 + D16 + S9 + S3 + S60 + S8 + S105 + D8 + D5, 1)

solution = solve((eq1, eq2, eq3, eq4, eq5, eq6, eq7, eq8, eq9, eq10, eq11, eq12))

print(solution)
python math equation constraint-programming
1个回答
0
投票

你确实找到了正确的解决方案,如果你像这样打印解决方案可能会更清楚:

for var, eq in solution.items():
    print(var,' = ',eq)

给出:

D10  =  L4/2 - L6/2 - L7/2 - S105/2 - S11/2 - S12/2 + S3/2 + S60/2 + S72/2 - S9/2 + 1/2
D12  =  L3/2 + L4/2 + L6/2 + L7 + S105/2 - S3/2 + S5/2 - S72 - S8/2 - S9/2
D16  =  L3 + L5 + L6 + L7 + L8 - S60 - 1
D28  =  -L7 + L8 - S105 + S72
D4  =  -L4/2 + L6/2 + L7/2 + S105/2 - S11/2 - S12/2 - S3/2 - S60/2 - S72/2 + S9/2 + 1/2
D5  =  -L3/2 + L4/2 + L6/2 - S105/2 - S3/2 - S5/2 + S8/2 - S9/2 - 1
D72  =  -L5 - L6 - L8 - S72 + 1
D8  =  -L3/2 - L4 - L7/2 + S11/2 - S12/2 - S5/2 - S60/2 + S72/2 - S8/2 + 1/2
D9  =  -L3/2 - L6 - L7/2 - L8 - S11/2 + S12/2 - S5/2 + S60/2 - S72/2 - S8/2 + 1/2
L1  =  -L5 - L6 - L7 - L8 + S60 + 1
L2  =  -L3 - L4 - S60 + 1

你会发现很多解,因为解是不确定的。如果您想添加额外的约束,即变量为 0 或 1,那么您需要使用二元线性规划或整数线性规划求解器。也许看看:

https://realpython.com/linear-programming-python/

© www.soinside.com 2019 - 2024. All rights reserved.