UNPKG

javascript-lp-solver

Version:

Easy to use, JSON oriented Linear Programming and Mixed Int. Programming Solver

70 lines (60 loc) 2.37 kB
/*global require*/ var Tableau = require("./Tableau.js"); function VariableData(index, value) { this.index = index; this.value = value; } //------------------------------------------------------------------- //------------------------------------------------------------------- Tableau.prototype.getMostFractionalVar = function () { var biggestFraction = 0; var selectedVarIndex = null; var selectedVarValue = null; var mid = 0.5; var integerVariables = this.model.integerVariables; var nIntegerVars = integerVariables.length; for (var v = 0; v < nIntegerVars; v++) { var varIndex = integerVariables[v].index; var varRow = this.rowByVarIndex[varIndex]; if (varRow === -1) { continue; } var varValue = this.matrix[varRow][this.rhsColumn]; var fraction = Math.abs(varValue - Math.round(varValue)); if (biggestFraction < fraction) { biggestFraction = fraction; selectedVarIndex = varIndex; selectedVarValue = varValue; } } return new VariableData(selectedVarIndex, selectedVarValue); }; //------------------------------------------------------------------- //------------------------------------------------------------------- Tableau.prototype.getFractionalVarWithLowestCost = function () { var highestCost = Infinity; var selectedVarIndex = null; var selectedVarValue = null; var integerVariables = this.model.integerVariables; var nIntegerVars = integerVariables.length; for (var v = 0; v < nIntegerVars; v++) { var variable = integerVariables[v]; var varIndex = variable.index; var varRow = this.rowByVarIndex[varIndex]; if (varRow === -1) { // Variable value is non basic // its value is 0 continue; } var varValue = this.matrix[varRow][this.rhsColumn]; if (Math.abs(varValue - Math.round(varValue)) > this.precision) { var cost = variable.cost; if (highestCost > cost) { highestCost = cost; selectedVarIndex = varIndex; selectedVarValue = varValue; } } } return new VariableData(selectedVarIndex, selectedVarValue); };