2012-12-31 38 views
1

我有一組簡單的約束Z3是無法應付的:Z3返回未知

http://pastebin.com/3eaLQ9wx

是否有辦法來調整,以獲得結果的約束? 這是一個較大的約束(千)的一個簡單的例子,但 我有點困擾,即使在這樣簡單的例子,它不起作用

在此先感謝!

回答

1

您的問題有非線性約束。雖然Z3在大多數情況下可以處理它們,但是Int s和Real的混合似乎超出了目前的能力。如果您只是使用Real s爲您的s_0_1,s_0_2等變量,我相信Z3將能夠解決問題。 (你似乎有足夠的價值限制,所以我相信不存在建模問題。)

我認爲萊昂納多多次表示即將發佈的版本將會更好地支持組合理論在非線性限制。

+1

Levent是正確的,問題是使用混合整數和真正的非線性算術。我看到兩種可能的解決方法。我們可以用真實變量替換所有整型變量,這是可以的,因爲整數變量只能在你的問題中假設0或1個值(這裏是這個解決方案:http://rise4fun.com/Z3Py/ICFA)。在這種情況下,將使用Z3中的新的nlsat解算器。另一種選擇是用布爾變量替換整型變量,並使用If來將問題線性化。以下是此解決方案的鏈接http://rise4fun.com/Z3Py/egCe。第二種解決方案應該比較好。 –