簡體   English   中英

在Microsoft Solver Foundation中處理實數范圍

[英]On working with ranges of real numbers in Microsoft Solver Foundation

我正在研究的求解器項目(C#)要求測試是否有解決方案,而不論其質量如何,或者是否要解決某些輸入落在某些預定的實數范圍內的問題。

我將以下示例放在一起,其中包含一個約束,表示一個值(參數類型)和由兩個變量組成的方程(決策類型)之間的簡單相等性測試。

        const double DESIRED_OUTPUT_VALUE = -2.5;

        SolverContext solver = SolverContext.GetContext();
        Model model = solver.CreateModel();

        //Defined a value to be tested against
        Parameter output = new Parameter(Domain.Real, "output");
        output.SetBinding(DESIRED_OUTPUT_VALUE);

        //Defined a range between 1 & 10 for the input variables.
        Domain inputDomain = Domain.RealRange(1, 10);
        Decision inputA = new Decision(inputDomain, "inputA");
        Decision inputB = new Decision(inputDomain, "inputB");

        model.AddDecision(inputA);
        model.AddDecision(inputB);
        model.AddParameter(output);

        //The constraint, which given the value of output currently is not solvable.
        Constraint constraint = model.AddConstraint("result", output == inputA / inputB);

        /*Expected that the solver would report back quickly that this is no feasable solution.
         *However instead it just sits there with a blank screen... 
         */
        Solution solution = solver.Solve();
        Report report = solution.GetReport();
        Console.WriteLine(report);
        Console.ReadLine();

我觀察到的是,如果更改了約束條件以至於沒有解,並且其中表示的方程是除法或乘法,則求解器似乎停滯了,未給出關於是否仍在求解的任何反饋。

我懷疑這種類似停滯的行為與求解器正在處理實數並且處於某些窮舉搜索之中有關,但是,如果更改了約束以使存在已知的解決方案,則它會非常快速地工作。

遍歷各種論壇后,我仍然不確定是什么引起了這種現象,或者鑒於這是我第一次使用Microsoft Solver Foundation,因此我的實施方法是否正確。

其他人是否遇到過此問題或確實有解決方案?

d。

Solver Foundation選擇的求解器取決於許多因素。 一個重要因素是您如何在目標和約束中使用決策。 在這種情況下,您將划分兩個決策,這意味着需要使用非常通用的求解器。

如果可以編寫模型,使決策對象中的目標和約束線性化,那么您將獲得更大的成功。 我意識到這並非總是可能的,但是在這種特定情況下,它可以:將輸出== inputA / inputB更改為inputB * output == inputA。

我認為這應該有所幫助。 內特

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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