前言:
通過JavaScript實作整數規劃問題。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>整數規劃</title>
</head>
<body>
<script>
//說明:
//1. 限制條件必須全部轉化為小于等于
//價值系數
var valueCoefficient = [, -, ];
//限制系數
var coefficients = [
[, , -, ],
[, , , ],
[, , , ],
[, , , ]
];
//列出所有結果集
var binary = Math.pow(, valueCoefficient.length) - ;
var temp;
var result;
var possibleResult = [];
for(var i=binary; i>=; i--) {
result = "";
temp = i.toString();
for(var j=; j< valueCoefficient.length-temp.length; j++) {
result += "0";
}
result = temp + result
var array = [];
for(var k=; k<result.length; k++) {
array.push(Number(result[k]));
}
possibleResult.push(array);
}
//滿足條件的所有結果集
var feasibilityResult = [];
//周遊所有可能結果集
for(var t=; t<possibleResult.length; t++) {
//是否全部滿足限制條件辨別符
var flag = ;
//周遊所有限制條件
for(var i=; i<coefficients.length; i++) {
var resultValue = ;
var limitValue = coefficients[i][coefficients[].length-];
for(var j=; j<coefficients[].length - ; j++) {
var resultValue = resultValue + coefficients[i][j] * possibleResult[t][j];
}
//判斷左邊是否大于右邊,如果大于則退出目前循環
if(resultValue > limitValue) {
flag = ;
break;
}
}
//如果滿足條件則計算目标值
if(flag == ) {
var sum = ;
for(var m=; m<possibleResult[t].length; m++) {
sum = sum + possibleResult[t][m] * valueCoefficient[m];
}
feasibilityResult.push(sum);
console.table(possibleResult[t]);
console.log(sum);
}
}
//找出最優解
var finalValue = feasibilityResult.sort(function(pre, next) {
return next - pre;
})[];
console.log("\n\n最優解為: "+finalValue);
</script>
</body>
</html>
(完)