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