2017-11-15 6 views
-1

Choco solverを使用して、いくつかの制約を満たす数学的問題を生成するJavaプログラムを作成します。 、Choco Solver数式表現の生成

  • xy & zは、そのうちの一つが、2桁の長さと正の整数ではなく、互いに必ずしも異なる、以下のとおりです。

    x @ y ∆ z = r 
    

    : 問題は次の形式を取らなければなりません他の2桁は1桁の長さです。

  • @ & は、演算子+、されている - の」私はこれらの数学の問題を生成したい

正の1桁の整数または*(両方でも同じ作業のために立つことができることに注意してください)

  • rです需要 "(その時のように)、彼らは無作為化する必要がある生成された問題の間にパターンや固定順序は存在してはいけません)。

    私は制約(満足度)のプログラミングを行っているので、それは優に10年が経ちましたが、私はC(好ましくはチョコによる)(S)Pを信じて、ここで適用するための適切なツールです。 これは間違いありません。

  • +0

    ご質問はありますか? – azurefrog

    +0

    は(私が始めるのに役立つ、すなわちいくつかのコードを)これが可能で、どのようにそれについて移動するかどうかを@azurefrog。 – Matthias

    +0

    より具体的にする必要があります。既存のjavadoc、ユーザーガイド、チュートリアルの例は、必要なものをどのように提供していないのですか?私たちは、あなたが試したことと、あなたが私たちに言わないとうまくいかないことを知りません。 – azurefrog

    答えて

    1

    すべてはドキュメントおよび公式チュートリアル(http://choco-tuto.readthedocs.io/en/latest/)に記載されています。これが複雑すぎると感じたら、この非常に単純な例(https://www.cosling.com/choco-solver/hello-world)を見てください。それはあなたが行うことができますから、+ B < 8を作成する方法を示します。y @ のx = デルタZ = R (arithmおよび/または時間制約を介して)

    3

    あなたは確かに、このような問題をモデル化することができますチョコのようなCPソルバを使っています。 あなたはより多くの詳細についてはdocumentationtutorialsを見てする必要がありますが、あなたが必要となります。

    • xyzのために、整数の変数(IntVar)を宣言するModel
    • を作成するには、
    • これを制約にリンクするには、IntVar式APIを使用して宣言を簡単にすることをお勧めします。このようなAPIを使用すると、算術的、論理的、および関係式を構築できます。あなたのランダム選択に依存addsubmulが組み合わされて

      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(); 
      

      方法:ここで

    は簡単な例です。 次に、表の制約を使用して式をエンコードしようとするか、ソルバーが選択できるようにすることができます。