javascript-lp-solver
Version:
Easy to use, JSON oriented Linear Programming and Mixed Int. Programming Solver
70 lines (60 loc) • 2.37 kB
JavaScript
/*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);
};