Пример #1
0
        private void Solve()
        {
            var text = TextBox.Text;

            if (string.IsNullOrWhiteSpace(text))
            {
                return;
            }
            try
            {
                // var result = LinearSolver.Solve(text);
                // MessageBox.Show(result.Message, "Result", MessageBoxButton.OK);
                var result       = LinearModelSolver.Solve(LinearParser.Parse(text));
                var resultWindow = new LinearResultWindow(result);
                resultWindow.ShowDialog();
            }
            catch (InvalidInputException iie)
            {
                MessageBox.Show(iie.Message + $"\n Error Line: {iie.ParsedInput[iie.ErrorLine]}", "Input Error", MessageBoxButton.OK, MessageBoxImage.Error);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Unknown Error", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
Пример #2
0
    [Test] public void LinearFromString5()
    {
        var inputString = @"MAX Z = X1 + X2
1.5X1 + 1.5X2 <= 3";

        var model       = LinearParser.Parse(inputString);
        var solvedModel = LinearModelSolver.Solve(model);

        Assert.AreEqual(SolvedResult.Optimized, solvedModel.Result);
        Assert.AreEqual(new BigRational(2, 1), solvedModel.Z);
    }
Пример #3
0
    [Test] public void LinearFromString4()
    {
        var inputString = @"MAX Z = 3X1 + X2 + 3X3
2X1 + X2 + X3 <= 2
X1 + 2X2 + 3X3 <= 5
2X1 + 2X2 + X3 <= 6";

        var model       = LinearParser.Parse(inputString);
        var solvedModel = LinearModelSolver.Solve(model);

        Assert.AreEqual(SolvedResult.Optimized, solvedModel.Result);
        Assert.AreEqual(new BigRational(54, 10), solvedModel.Z);
    }
Пример #4
0
    [Test] public void LinearFromString2()
    {
        var inputString = @"MAX Z = X1 + X2
3X1 + 2X2 <= 20
2X1 + 3X2 <= 20
X1 + 2X2 >= 2";

        var model       = LinearParser.Parse(inputString);
        var solvedModel = LinearModelSolver.Solve(model);

        Assert.AreEqual(SolvedResult.Optimized, solvedModel.Result);
        Assert.AreEqual(new BigRational(8, 1), solvedModel.Z);
    }
Пример #5
0
    [Test] public void LinearFromString()
    {
        var inputString = @"MAX Z = 3X1 + 5X2
X1 <= 4
2X2 <= 12
3X1 + 2X2 <= 18";

        var model       = LinearParser.Parse(inputString);
        var solvedModel = LinearModelSolver.Solve(model);

        Assert.AreEqual(SolvedResult.Optimized, solvedModel.Result);
        Assert.AreEqual(new BigRational(36, 1), solvedModel.Z);
    }
Пример #6
0
    [Test] public void LinearFromString3()
    {
        var inputString = @"MIN Z = -1X1 + 2X2 - 3X3
X1 + X2 + X3 = 6
-1X1 + X2 + 2X3 = 4
2X2 + 3X3 = 10
X3 <= 2";

        var model       = LinearParser.Parse(inputString);
        var solvedModel = LinearModelSolver.Solve(model);

        Assert.AreEqual(SolvedResult.Optimized, solvedModel.Result);
        Assert.AreEqual(new BigRational(-4, 1), solvedModel.Z);
    }
Пример #7
0
    [Test] public void BuildLinearModelFromString()
    {
        var text = InputsResource.Linear1;

        Console.WriteLine(text);
        var model = LinearParser.Parse(InputsResource.Linear1);

        Assert.IsTrue(model.Objective == Objective.MAX);
        Assert.IsTrue(model.Variables.Count == 2);

        var x1 = model.Variables[0];
        var x2 = model.Variables[1];

        Assert.IsTrue(model.Constraints.Count == 3);

        var c1 = model.Constraints[0];
        var c2 = model.Constraints[1];
        var c3 = model.Constraints[2];

        Assert.IsTrue(c1.ConstraintValue == 4);
        Assert.IsTrue(c1.ConstraintType == ConstraintType.LessThanOrEqualTo);
        Assert.IsTrue(c1.Variables.Count == 1);
        Assert.IsTrue(c1.Variables[0].Variable == x1);
        Assert.IsTrue(c1.Variables[0].Coefficient == 1);

        Assert.IsTrue(c2.ConstraintValue == 12);
        Assert.IsTrue(c2.ConstraintType == ConstraintType.LessThanOrEqualTo);
        Assert.IsTrue(c2.Variables.Count == 1);
        Assert.IsTrue(c2.Variables[0].Variable == x2);
        Assert.IsTrue(c2.Variables[0].Coefficient == 2);

        Assert.IsTrue(c3.ConstraintValue == 18);
        Assert.IsTrue(c3.ConstraintType == ConstraintType.LessThanOrEqualTo);
        Assert.IsTrue(c3.Variables.Count == 2);
        Assert.IsTrue(c3.Variables[0].Variable == x1);
        Assert.IsTrue(c3.Variables[0].Coefficient == 3);
        Assert.IsTrue(c3.Variables[1].Variable == x2);
        Assert.IsTrue(c3.Variables[1].Coefficient == 2);

        var objFunc = model.ObjectiveFunction;

        Assert.IsTrue(objFunc[0].Variable == x1);
        Assert.IsTrue(objFunc[0].Coefficient == 3);
        Assert.IsTrue(objFunc[1].Variable == x2);
        Assert.IsTrue(objFunc[1].Coefficient == 5);

        Assert.Pass();
    }
Пример #8
0
        static void Main(string[] args)
        {
            if (args.Length != 1)
            {
                Console.WriteLine("Path argument required, for example:  PrestoParser.exe ./input-sample.txt");
                return;
            }

            LinearParser prestoParse = new LinearParser(args[0], new FixedWidthFormat());

            try
            {
                // parse the passed in data file
                List <ProductRecord> records = prestoParse.Parse();

                int goodCount = 0;

                // simple json exporter
                using (StreamWriter writer = new StreamWriter("./output.json", false))
                {
                    writer.WriteLine("{ \"Record\" : [");

                    ProductRecord lastRecord = records.Last();
                    foreach (ProductRecord r in records)
                    {
                        writer.WriteLine(r.OutputJSON() + ((r != lastRecord) ? ", " : ""));

                        goodCount += r.IsGood() ? 1 : 0;
                    }

                    writer.WriteLine("] }");
                }

                // output good/bad record status to console
                Console.WriteLine("Records Parsed: " + records.Count + ", Bad Records: " + (records.Count - goodCount));
            }
            catch (ParserException exception)
            {
                Console.WriteLine("Parsing Failed with error: ");
                Console.Write(exception.Message);
            }

            Console.WriteLine("Press enter to continue");
            Console.ReadLine();
        }
Пример #9
0
 public async Task Solve()
 {
     if (string.IsNullOrWhiteSpace(Text))
     {
         return;
     }
     try
     {
         var result       = LinearModelSolver.Solve(LinearParser.Parse(Text));
         var resultWindow = new SolvedView(MainWindow, result)
         {
             DataContext = new SolvedViewModel()
         };
         await resultWindow.ShowDialog(MainWindow);
     }
     catch (InvalidInputException iie)
     {
         await MessageBox.Show(MainWindow, iie.Message + $"\n Error Line: {iie.ParsedInput[iie.ErrorLine]}", "Input Error", MessageBox.MessageBoxButtons.Ok);
     }
     catch (Exception ex)
     {
         await MessageBox.Show(MainWindow, ex.Message, "Unknown Error", MessageBox.MessageBoxButtons.Ok);
     }
 }