人智導(四):約束滿足問題

人智導(四):約束滿足問題

約束滿足問題(Constraint Satisfaction Problem)

  • 一種結構化的、簡單而標準模式的問題表示
  • 狀態被描述爲一系列變量XiX_i(對應的值域爲DiD_i
  • 目標測試:一個約束集,描述這些變量或子集允許的取值

CSP問題的定義

約束滿足問題的定義:

  • 變量集合:{X1,X2,,Xn}\{X_1,X_2,\dots ,X_n\};約束集合:{C1,C2,,Cn}\{C_1,C_2,\dots ,C_n\}XiX_i對應的值域爲DiD_iCiC_i爲一些變量間的約束關係。
  • 一個狀態:部分或全部變量的一個賦值
  • 完全賦值:每個變量都進行賦值(完全狀態complete state)
  • 問題的解:滿足所有約束的完全賦值

約束滿足問題:地圖着色(map coloring)

如圖
在這裏插入圖片描述

  • 狀態變量:WT, NT, Q, NSW, V, SA, T
  • 值域:D={red, green, blue}D=\{red,~green,~blue\}
  • 約束:相鄰區域必須用不同顏色標識
    • 隱式描述:WANTWA\ne NT
    • 顯式描述:(WA,NT){(red, green), (red, blue),}(WA,NT)\in \{(red,~green),~(red,~blue),\dots\}
  • 問題的解是滿足約束的變量賦值,如:
    {WA=red, NT=green, Q=red, NSW=green, V=red, SA=blue, T=green}\{WA=red,~NT=green,~Q=-red,~NSW=green,~V=red,~SA=blue,~T=green\}

約束滿足問題:八皇后問題

在這裏插入圖片描述
約束規則:同一行或同一列、或統一斜線上不能有兩個或以上的Queens
形式化描述:

  • 變量:XijX_{ij}
  • 值域:{0,1}\{0,1\}
  • 約束:
    • i,j,k(Xij,Xik){(0,0),(0,1),(1,0)}\forall i,j,k (X_{ij},X_{ik})\in \{(0,0),(0,1),(1,0)\}
    • i,j,k(Xij,Xkj){(0,0),(0,1),(1,0)}\forall i,j,k (X_{ij},X_{kj})\in \{(0,0),(0,1),(1,0)\}
    • i,j,k(Xij,Xi+k,j+k){(0,0),(0,1),(1,0)}\forall i,j,k (X_{ij},X_{i+k,j+k})\in \{(0,0),(0,1),(1,0)\}
    • i,j,k(Xij,Xi+k,jk){(0,0),(0,1),(1,0)}\forall i,j,k (X_{ij},X_{i+k,j-k})\in \{(0,0),(0,1),(1,0)\}

約束滿足中的變量與約束

  • 變量種類:離散變量 vs 連續變量(現實世界中許多問題涉及實數型變量)
  • 約束種類:
    • 一元約束:如SAgreenSA\ne green
    • 二元約束:如SAWASA\ne WA
    • 多元約束:涉及三個以上變量的高階約束
  • 目標測試:檢查是否滿足所有約束條件

CSP問題的解決

標準搜索方法解決CSP問題

  • CSP問題表示:狀態(state)通過變量賦值來定義
    • 初始狀態:沒有任何賦值{}
    • 後繼函數:對一個未有值的變量賦值,不違反約束條件
    • 目標測試:當前狀態賦值已完備,並且滿足所有約束
    • 路徑代價可把每一步代價作爲常數(例如取值爲1)
  • CSP問題的解:必須是一個滿足約束的完全賦值,若有n個變量,n也就是解的路徑深度

回溯搜索算法

在這裏插入圖片描述
思路:

  • 無信息搜索算法解決CSP
  • 一次只給一個變量賦值
  • 過程中每步都檢測是否滿足約束(不與之前賦值相沖突)
    算法:
Function BACKTRACKING-SEARCH (csp) returns solution or failure
	return RECURSIVE-BACKTRACKING({},csp)
Function RECURSIVE-BACKTRACKING(assignment, csp) returns solution or failure
	if assignment is complete then return assignment
	var <--- SELECT-UNASSIGNED-VARIABLE(VARIABLES[csp],assignment, csp)
	for each value in ORDER-DOMAIN-VALUES(var assignment, csp) do
		if value is consistent with assignment given CONSTRAINTS[csp] then
			add{var = value} to assignment
			result <--- RECURSIVE-BACKTRACKING(assignment, csp)
			if result != failure then return result
			remove {var = value} from assignment
	return failure

深度優先搜索+有序變量賦值+違反約束即失敗
啓發式:優先選擇合法取值最少變量(最受約束變量)
標準問題求解與完全狀態問題對比

  • CSP標準的問題求解:如何發現動作序列,一步一步地達到目標
    • 看作是規劃(plan)問題
    • 達到目標的途徑是重要的
  • CSP解決完全狀態問題:如何發現滿足約束的完全賦值
    • 看作是識別(Identification)問題
    • 目標本身是重要的,而途徑不是

完全狀態問題

局部搜索:問題的完整狀態(complete-state)形式表示

  • 初始狀態:每個變量均被賦值
  • 後繼狀態:每次改變一個變量的值
  • 直到發現滿足約束的解

如下圖:
在這裏插入圖片描述
初始狀態違反了約束,採用局部搜索來消除違反的約束
算法:最小衝突算法Min-Conflict

Function MIN-CONFLICTS(csp, max_steps) returns a solution or failure
	inputs:csp
	       max_steps //最大嘗試次數
	current <--- an initial complete assignment for csp
	for i=1 to max_steps do
		if current is a solution for csp then return current
		var <--- a randomly chosen conflicted variable from csp.VARIABLES
		value <--- the value v for var that minimizes CONFLICTS(var, v, current, csp)
		set var = value in current
	return failure

最小衝突算法:每一步搜索爲一個變量賦予新值,啓發式是新值必須與其他變量相沖突的數目最小化。
爬山或模擬退火等局部搜素可以被應用於目標優化。

總結

局部搜索問題

  • 局部搜索:只關心目標狀態本身,而非達到目標的途徑
  • 僅需少量存儲空間,適於處理大規模的、甚至是連續狀態空間的目標搜索狀態
  • 完全狀態(complete state)的形式化描述問題,諸如佈局、調度、最優化問題等方面應用
  • 爬山搜索算法、模擬退火算法、局部集束算法
    約束滿足問題
  • 從數學意義上定義一種簡單而標準模式的問題形式化表示
  • 完全狀態(complete state)的形式化,狀態由一組變量表示
  • 約束滿足問題求解:回溯搜索(標準搜索),最小衝突搜索(局部搜索)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章