Asp.net 微软解决方案基金会

Asp.net 微软解决方案基金会,asp.net,c#-4.0,ms-solver-foundation,Asp.net,C# 4.0,Ms Solver Foundation,我需要将一个使用解决方案插件的Excel电子表格移植到ASP.NET C站点,我使用解决方案基金会3.1没有用。 方程是迭代的,为了确定两个决策值,需要满足两个条件 电子表格上的两个决策值设置为1 Ng = 1 Nv = 1 然后,目标是在满足以下条件时,找到公式1的最大值: Decision 1: Formula1 = _na Decision 2: Formula2 = Formula3 所有公式都使用Ng和Nv,点击求解更改Ng和Nv以满足每个方程,在电子表格上平均需要22次迭代 我在

我需要将一个使用解决方案插件的Excel电子表格移植到ASP.NET C站点,我使用解决方案基金会3.1没有用。 方程是迭代的,为了确定两个决策值,需要满足两个条件

电子表格上的两个决策值设置为1

Ng = 1
Nv = 1
然后,目标是在满足以下条件时,找到公式1的最大值:

Decision 1: Formula1 = _na
Decision 2: Formula2 = Formula3
所有公式都使用Ng和Nv,点击求解更改Ng和Nv以满足每个方程,在电子表格上平均需要22次迭代

我在c#中实现了它,如下所示:

 public class FluxSolver
    {
        public FluxSolver(double _na, double _ygo, double _k, double _alpha, double _inletVoidFraction)
        {
            var solver = SolverContext.GetContext();
            solver.ClearModel();

            var model = solver.CreateModel();

            var decisionNG = new Decision(Domain.RealNonnegative, "NG");
            var decisionNV = new Decision(Domain.RealNonnegative, "NV");

            model.AddDecision(decisionNG);
            model.AddDecision(decisionNV);

            Term formula1 = (_ygo * decisionNG) + ((1 - _ygo) * decisionNV);

            model.AddGoal("Goal", GoalKind.Maximize, formula1);

            model.AddConstraint("Constraint1", ((_inletVoidFraction / _k) * (1 / decisionNG)) == (_alpha * ((1 / decisionNV) - 1)));
            model.AddConstraint("Constraint2", ( _ygo * decisionNG) + ((1 - _ygo) * decisionNV) == _na);

            var solution = solver.Solve();

            NV = decisionNV.GetDouble();
            NG = decisionNG.GetDouble();
            Quality = solution.Quality.ToString();

        }

        public double NG { get; set; }
        public double NV { get; set; }
        public string Quality { get; set; }
    }
我已经做了3天了,仍然没有取得任何进展,解算器只是加载和消失,从不超时,不返回值等。我的代码中有什么根本性的错误吗


感谢您的帮助

您的
FluxSolver
类的实现似乎没有什么问题,我未经修改就尝试了它,它立即返回了一个解决方案。(我的in参数是1、1、1、1和0.5。)我注意到决策变量是以除法表示的分母;也许您应该将可行变量范围设置为
Domain.RealRange(EPS,Rational.PositiveInfinity)
(其中
EPS
是一个足够小的正值),而不是
Domain.RealNonnegative
@anderscustafson谢谢您的帮助,抱歉,我忘了提到在init上传递的值通常是小数点后5位,如下面的示例:FluxSolver massflux=new FluxSolver(0.10330,0.46954,1,2.21680,0.88944);我尝试过将您提到的边界设置为0到1之间(因为excel电子表格返回的值在本例中为Ng=0.0614和Nv=0.14033),我有一种感觉,因为在比较约束时,excel电子表格将数字舍入到小数点后五位,而我的边界则是第n位,这就是它从不匹配的原因!我该如何将小数点四舍五入?约束中不接受Math.Round…大多数
Math
函数在
Model
中有其MSF对应项,例如
Model.Abs
Model.Sin
等(但不是
Model.Round
)。也许你可以用这些函数重新表述你的问题。