作者photonzero (邪心魔佛)
看板EE_DSnP
標題Re: [情報] SAT 之使用
時間Tue Jan 17 11:13:59 2012
※ 引述《ric2k1 (Ric)》之銘言:
: 雖然講義裏頭應該是說明得很清楚了,但我還是翻成中文來跟大家說明一下,
: 其實是很簡單用的...
: 1. Create 一個 SatSolver 的 object, 並且呼叫 initialize().
: 2. 在證明任何 FEC pair 之前,請先建立整個 circuit 的 SAT model,
: 也就是說: (1) 每個 gate (含 PIs) 要對應到一個 SAT Var (solver.newVar()),
: (2) 呼叫 solver.addAigCNF() 去建立每個 AIG gate 對應的 CNF,
: 這些 CNF clauses 會存在 solver 中。
: 3. 針對某個要證明的 FEC pair "F == XOR(f, g)", (<= 要給 F 一個新的 SAT Var)
請問要給一個新的變數是什麼意思
是每次模擬就要給一個新變數嗎
i.e 每次都要重新Var F=s.newVar();
: 呼叫 solver.addXorCNF() 去建立對應的 CNF clauses.
: 4. 呼叫 "solver.assumeProperty(F_var)" 以及 solver.assumpSolve()
: 來看看 F == XOR(f, g) 是否可以 satisfied.
: 5. 如果 UNSAT (solve() return false), 則 f alywas = g, => 可以merge.
: 如果 SAT (solver() return true), 則可以根據 circuit 的 PIs 所對應的
: SAT vars 去抓到 SAT assignment (呼叫 getValue()),
: 然後等一下可以利用這些 assignment (pattern) 去 simulate.
: 6. 下次要再證明別的 pair 時只要把 assumption release,
: 再重複 3 ~ 5 就可以了! 不用重建電路的 proof model.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.228.34.151
※ 編輯: photonzero 來自: 61.228.34.151 (01/17 11:15)
1F:推 ric2k1:SAT 跟模擬沒有關係吧!? 01/17 11:38
2F:→ photonzero:這李的模擬是指看是否有解能satisfy 01/17 11:50
3F:推 ric2k1:應該是說每一次要證明新的 pair 都要產生新的 SAT var 01/17 11:54
4F:→ photonzero:那可以把原本的給delete掉嗎? 01/17 11:55
5F:推 ric2k1:要 delete 原本的變數不容易,要改 sat 的 code... 01/17 12:05
6F:→ ric2k1:建議不要 01/17 12:05
7F:→ photonzero:我試過直接在XORCNF內加上^(上次結果),但會有記憶體錯 01/17 12:16
8F:→ photonzero:而且錯誤發生在SAT內= =,為什麼直接在true false動手 01/17 12:17
9F:→ photonzero:不行勒QQ 01/17 12:17
10F:→ photonzero:教授我在最外面宣告一個Var就可以跑,但在裡面就會當掉 01/17 13:15
11F:→ photonzero:而且當掉點都在SAT內,可以請問是為什麼嗎,而且我FEC 01/17 13:16
12F:→ photonzero:內部有照dfs順序 01/17 13:17