решатель решает проблему программирования ограничений - PullRequest
1 голос
/ 26 ноября 2010

Кто-нибудь знает какой-нибудь простой решатель, который может решать математические модели линейных ограничений?Пример простой модели:

a + b + c = 100;
a/b/c = 2/3/4;
a > d

Я использую фундамент MS Solver, и это мой код на C #, но он выдает UnsolvableModelException:

        SolverContext solverContext = SolverContext.GetContext();
        Model model = solverContext.CreateModel();
        Decision a = new Decision(Domain.Real, "a");
        Decision b = new Decision(Domain.Real, "b");
        model.AddDecisions(a, b);
        model.AddConstraint("fator", a / b ==  4);
        model.AddConstraint("sum", a + b == 5);
        Solution solution = solverContext.Solve(new ConstraintProgrammingDirective());
        Report report = solution.GetReport();
        Console.WriteLine("a = {0} ; b = {1}", a, b);

Спасибо за любую помощь

Изменить:

Поскольку проблема int CSP (программирование ограничений), вы не должны использовать какие-либо директивы при ее решении.Код должен быть:

    SolverContext solverContext = SolverContext.GetContext();
    Model model = solverContext.CreateModel();
    Decision a = new Decision(Domain.Real, "a");
    Decision b = new Decision(Domain.Real, "b");
    model.AddDecisions(a, b);
    model.AddConstraint("fator", a / b ==  4);
    model.AddConstraint("sum", a + b == 5);
    Solution solution = solverContext.Solve();
    Report report = solution.GetReport();
    Console.WriteLine("a = {0} ; b = {1}", a, b);

Однако я не знаю, почему я бежал медленно, мне нужно только первое решение в наборе решений.

1 Ответ

1 голос
/ 26 ноября 2010

В зависимости от ваших потребностей, Wolfram Alpha может быть полезен (по крайней мере, для проверки).Я сомневаюсь, что вы можете решить сложные проблемы, потому что ввод ограничен по длине.Но для простых задач, как ваш пример, это нормально.

http://www.wolframalpha.com/input/?i=solve+a+%2B+b+%2B+c+%3D%3D+100%3B+a%2Fb+%3D%3D+2%2F3%3B+b%2Fc%3D%3D3%2F4%3B+a+%3E+d

alt text

...