这个项目是关于编写一个lineair程序的,该程序将同一组的人并排放置在飞机上,而我被困在程序上 我们有一个包含6列和29个原始数据的矩阵。每个(i,j,k)代表(client,col,raw),每个客户都属于某个组K 但是因为这是一个三维问题,所以我不知道该怎么写
答案 0 :(得分:0)
如果我们有二进制变量:
x(p,r,s) = 1 if passenger p is sitting in row r, seat s
0 otherwise
然后我们可以最大化:
max sum x(p1,r,s)*x(p2,r,s+1)
其中,总和是同一组中的所有(p1,p2),以及所有行和位。这是非凸的,但是您可以线性化乘积(这是二进制变量的乘积)。这导致:
max sum y(p1,p2,r,s)
y(p1,p2,r,s) <= x(p1,r,s)
y(p1,p2,r,s) <= x(p2,r,s+1)
0 <= y(p1,p2,r,s) <= 1
可能“行”需要定义为彼此相邻的座位,即具有一个过道:
(r1,s1)(r1,s2)(r1,s3) (r2,s1)(r2,s2)(r2,s3)
(r3,s1)(r3,s2)(r3,s3) (r4,s1)(r4,s2)(r4,s3)
当然,您需要添加标准的“分配”约束(每个座位只能坐一次,每个乘客都可以坐下)。