[英]Choco Solver math expression generation
我想使用Choco求解器編寫一個Java程序,該程序會生成滿足許多約束的數學問題。 問題必須采用以下形式:
x @ y ∆ z = r
哪里:
x
, y
& z
是正整數,不一定彼此不同,其中一個為2位數字長,另外兩個為1位數字長
@
和∆
是運算符+,-或*(請注意,它們也可以代表同一運算符)
r
為正1位的整數
我想“按需”生成這些數學問題(例如一次),並且需要將它們隨機化(即,在生成的問題上不應有任何模式或固定順序)。
自從我完成約束(滿意度)編程以來已經有十多年了,但是我相信C(S)P(最好是借助Choco)是在此處應用的合適工具。 這是正確的,有人可以幫助我入門嗎?
您當然可以使用類似於choco的CP求解器來對此類問題進行建模。 您需要查看文檔和教程以了解更多詳細信息,但是您將需要:
Model
, x
, y
和z
聲明整數變量( IntVar
), IntVar
表達式API來簡化聲明。 這樣的API允許構建類似的算術,邏輯和關系表達式。 這是一個簡單的示例:
Model model = new Model();
IntVar x = model.intVar(0, 9);
IntVar y = model.intVar(0, 9);
IntVar z = model.intVar(0, 9);
int r = 10;
x.add(y).sub(z).eq(r).post();
model.getSolver().showSolutions(
() -> String.format("%d + %d - %d = %d",
x.getValue(), y.getValue(), z.getValue(), r));
model.getSolver().findAllSolutions();
add
, sub
和mul
組合的方式取決於您的隨機選擇器。 然后,您可以嘗試使用表約束對表達式進行編碼,或者讓求解器選擇。
一切都在文檔和官方教程中( http://choco-tuto.readthedocs.io/en/latest/ )。 如果您覺得這太復雜了,請看這個超級簡單的示例( https://www.cosling.com/choco-solver/hello-world )。 它顯示了如何使a + b <8,您可以這樣做:x @ y = AA delta z = r(通過arithm和/或時間約束)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.