簡體   English   中英

Choco Solver數學表達式生成

[英]Choco Solver math expression generation

我想使用Choco求解器編寫一個Java程序,該程序會生成滿足許多約束的數學問題。 問題必須采用以下形式:

x @ y ∆ z = r

哪里:

  • xyz是正整數,不一定彼此不同,其中一個為2位數字長,另外兩個為1位數字長

  • @是運算符+,-或*(請注意,它們也可以代表同一運算符)

  • r為正1位的整數

我想“按需”生成這些數學問題(例如一次),並且需要將它們隨機化(即,在生成的問題上不應有任何模式或固定順序)。

自從我完成約束(滿意度)編程以來已經有十多年了,但是我相信C(S)P(最好是借助Choco)是在此處應用的合適工具。 這是正確的,有人可以幫助我入門嗎?

您當然可以使用類似於choco的CP求解器來對此類問題進行建模。 您需要查看文檔教程以了解更多詳細信息,但是您將需要:

  • 創建一個Model
  • xyz聲明整數變量( 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();

addsubmul組合的方式取決於您的隨機選擇器。 然后,您可以嘗試使用表約束對表達式進行編碼,或者讓求解器選擇。

一切都在文檔和官方教程中( 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM