了解MinConflicts算法

时间:2016-11-08 21:28:13

标签: algorithm artificial-intelligence heuristics constraint-satisfaction

在维基百科中写道(Min-conflicts algorithm):

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

#301 redirect
RewriteCond %{HTTP_HOST} ^www.mywebsite.com$ [NC]
RewriteRule ^(.*)$ http://mywebsite.com/$1 [R=301,L]


</IfModule>

但这是什么意思?

例如,如果我有N皇后问题的以下矩阵:

value <-- the value v for var that minimizes CONFLICTS(var,v,current,csp)

这里有3个冲突,对吧?

如果我们将位置1,1上的女王移动到2,3位获得,那么CONFLICTS函数的值是多少:

  0 1 2 3
0 Q - - -
1 - Q - -
2 - - Q -
3 - - - Q

CONFLICTS应该返回2还是应该返回4?换句话说,我们应该只计算这位特定女王的冲突,还是应该统计全局的所有冲突。

维基百科也说

  

CONFLICTS函数计算特定对象违反的约束数,假定已知其余任务的状态

但这感觉不对。

1 个答案:

答案 0 :(得分:1)

  

“CONFLICTS函数计算特定对象违反的约束数量,因为已知其他任务的状态”但这感觉不对。

没错。

  0 1 2 3
0 Q - - -
1 - Q - -
2 - - Q -
3 - - - Q
     

这里有3个冲突,对吧?

此处CONFLICTED[csp][Q0, Q1, Q2, Q3]Qn表示n - 列上的女王)。如果随机选择的变量为Q1

  0 1 2 3
0 Q 1 - -
1 - Q - -
2 - 1 Q -
3 - 2 - Q

Q1打破3限制(攻击Q0Q2Q3)。

CONFLICTS(Q1)随机返回(0,1)(2,1)(如果有多个值且冲突次数最少,CONFLICTS会随机选择一个。)

返回(3,1)

  0 1 2 3
0 Q 1 - -
1 - 3 - -
2 - 1 Q -
3 - Q - Q

CONFLICTS(Q1)随机返回(0,1)(2,1)

CONFLICTS(var, v, current, csp)会考虑var州的特定女王(current)。

该系统的可能发展是:

  0 1 2 3
0 Q 1 - -
1 - Q - -
2 - 1 Q -
3 - 2 - Q

CONFLICTED[csp] = [Q0, Q1, Q2, Q3];
var = Q1
value = (0, 1)
  0 1 2 3
0 Q Q - -
1 1 - - -
2 1 - Q -
3 1 - - Q

CONFLICTED[csp] = [Q0, Q1, Q2, Q3];
var = Q0
value = (1, 0)
  0 1 2 3
0 1 Q - -
1 Q - - -
2 1 - Q -
3 1 - - Q

CONFLICTED[csp] = [Q0, Q1, Q2, Q3];
var = Q0
value = (2, 0)

如果var保留在Q0,则可以多次选择CONFLICTED[csp](此处 0 1 2 3 0 - Q 2 - 1 - - 1 - 2 Q - Q - 3 - - 1 Q CONFLICTED[csp] = [Q0, Q2, Q3]; var = Q2 value = (3, 2) )。

  0 1 2 3
0 - Q - 1
1 - - - 0
2 Q - - 2
3 - - Q Q

CONFLICTED[csp] = [Q2, Q3];
var = Q3
value = (1, 3)
  0 1 2 3
0 - Q - -
1 - - - Q
2 Q - - -
3 - - Q -

CONFLICTED[csp] = [];

current_state is a solution of csp
req.query