Matrix 整数不等式组:计数解

Matrix 整数不等式组:计数解,matrix,Matrix,我有一个不平等和约束的体系: Let A=[F1,F2,F3,F4,F5,F6] where F1 through F6 are given. Let B=[a,b,c,d,e,f] where a<=b<=c<=d<=e<=f. Let C=[u,v,w,x,y,z] where u<=v<=w<=x<=y<=z. Equation 1: if(a>F1, 1, 0) + if(a>F2, 1, 0) + ... + i

我有一个不平等和约束的体系:

Let A=[F1,F2,F3,F4,F5,F6] where F1 through F6 are given.
Let B=[a,b,c,d,e,f] where a<=b<=c<=d<=e<=f.
Let C=[u,v,w,x,y,z] where u<=v<=w<=x<=y<=z.

Equation 1: if(a>F1, 1, 0) + if(a>F2, 1, 0) + ... + if(f>F6, 1, 0) > 18
Equation 2: if(u>a, 1, 0) + if(u>b, 1, 0) + ... + if (z>f, 1, 0) > 18
Equation 3: if(F1>u, 1, 0) + if(F1>v, 1, 0) + ... + if(F6>z, 1, 0) > 18

Other constraints: All variables must be integers between 1 and N (N is given).
设A=[F1,F2,F3,F4,F5,F6],其中给出了F1到F6。
设B=[a,B,c,d,e,f]其中av,1,0)+…+如果(F6>z,1,0)>18
其他约束条件:所有变量必须是介于1和N(给定N)之间的整数。
我只希望计算变量的整数解的数量(我不希望实际求解它们)。我知道如何使用解算器来计算矩阵中的方程组,但这通常假设这些方程使用=而不是>=,>,,这里有一个尝试

这是非常低效的,因为我计算两个向量的笛卡尔积,然后比较每个元组组合。这也不会超过2维

另外,我担心这不是你想要的,因为我要独立地解每个方程。如果你在寻找满足不等式系统约束的三维空间的所有整数值,那么,这对我来说有点让人头疼,尽管很有趣

有人吗

#sample data
A =[12,2,15,104,54,20]
B =[10,20,30,40,50,60]
C =[100,200,300,400,500,600]

import itertools
def eq1():
    product = itertools.product(B,A)  #construct Cartesian product of 2 lists

    #list(product) returns a Cartesian product of tuples
    # [(12, 10), (12, 20), (12, 30)... (2, 10), (2, 20)... (20, 60)]

    #now, use a list comprehension to compare the values in each tuple,
    # generating a list of only those that satisfy the inequality...
    #  then return the length of that list - which is the count
    return len([ Bval for Bval, Aval in list(product) if Bval > Aval])


def eq2():
    product = itertools.product(C,B)
    return len([ Cval for Cval, Bval in list(product) if Cval>Bval])

def eq3():
    product = itertools.product(A,C)
    return len([ Aval for Aval, Cval in list(product) if Aval>Cval])


print eq1()
print eq2()
print eq3()
此示例数据返回:
eq1:21
eq2:36
eq3:1

但我不知道如何将这些答案组合成一个3的整数计数——列表之间会有某种联合


我的理智测试在等式3中,它返回“1”-因为只有当Aval=104时,它才满足Aval>Cval,对于Cval,它仅在100

请看下面我的答案,但我想我完全没有抓住要点。我们是在寻找满足所有3个方程的所有点(A,B,C),其中0是我们要做的吗?寻找a,b,c,d,e,f,u,v,w,x,y,z点的所有组合,满足这三个方程和约束条件。Re:这个链接,我想可能是这样的,是的。但我不知道线条的形状是什么样的;我这里有很多变量,它们在技术上是if语句。所有点的组合(a,b),(c,d),(e,f),(u,v)。。。或者(a,u),(b,v),(c,w)?