表示:
你有24个元素,我将其命名为从A这个元素X(24个字母)。 这四个元素中的每一个都会在4个图中的一个中放置。我将为从1到24的4个图表中的24个节点分配一个数字。
我将通过24-uple =(xA1,xA2 ...,xA24)确定A的位置,如果我想要把A赋给8号节点为例,我会写(xa1,Xa2..xa24)=(0,0,0,0,0,0,0,1,0,0 ... 0),其中图1是在第8位置
我们可以说,A =(A1,... xa24)
E1 ... E24是单位矢量(1,0 ...,0)到(0, 0 ...1)
注意到有关操作 '':
- A.e1 = XA1
- ...
- X.e24 = Xx24
上有一些限制A,... X与这些符号:
Xii在{0,1} 和
(Xa1,xb1,... Xx1)= 1 ... Sum(Xa24,Xb24,... Xx24)= 1 ... Sum(Xxi)= 1
Sum(Xa1, 1
由于一个元素只能分配给一个节点。
我将通过定义每个节点的邻居关系限定的曲线图,可以说,节点8具有邻居节点7和节点10
检查A和B是在节点8的邻居为例我NEDD:
A.e8 = 1和B.e7或B.e10 = 1,则我只需要A.e8 *(B.e7 + B.e10)== 1
在函数isNeighborInGraphs(A,B )我测试每个节点,我得到一个或零取决于邻里。
符号:
- 6个节点的4个曲线图中,每个元素的位置是由1-3的整数定义为24. (1至6第一图表等...)
- e1 ... e24是单位矢量(1,0,0 ... 0)至(0,0 ... 1)
- 设A,B ... X为N个元素。
A =(0,0 ...,1,...,0)=(XA1,XA2 ... xa24)
B = ...
。 ..
X =(0,0 ...,1,...,0)
IsNeigborInGraphs(A,B)= A.e1 * B.e2 + ... //如果1和2是在neigbors一个图表 为为例系统
L(A)= [B,B,C,E,G ...] //的A的 neigbors列表(可以重复)
actualise(L(A)):
for element in [B,X]
if IsNeigbotInGraphs(A,Element)
L(A).append(Element)
endIf
endfor
N(A)= LEN(L(A))+萨姆(IsneigborInGraph (A,i)中,i的L(A))
...
N(X)= ...该算法
- 开始的
说明与初始位置 A = E1 ... X = E24
具体化L(A),L(B)... ...你(X)
解决这个(用solveur,ampl为 为例将工作我想,因为它是 一个非线性优化 问题): 目标函数
分钟(萨姆(N(Z)中,Z = A至X)
限制条件:
萨姆(赛)= 1 ... Sum(Xxi)= 1
Sum(Xa1,xb1,... Xx1)= 1 ... 总和(Xa24,XB24,... Xx24)= 1
你得到最佳的解决方案
4.重复步骤2和3,3次以上。
我可能会遗漏一些东西,但... 24个对象意味着您可以为每个图中的每个节点分配一个不同的对象,从而导致任何给定邻居不超过一次。 – Chowlett 2011-06-06 14:57:32
@Chowlett,是的,但这只是一项任务(即将24个对象总共分配给4 x 6个节点)。我在这里感兴趣的是超过4个作业,重复邻居的数量被最小化。 – skyork 2011-06-06 15:02:17
啊,我遵循。我很困惑,因为有4个图表和4个分配,但是这些数字实际上是无关的。 – Chowlett 2011-06-06 15:22:24