天天看點

整數規劃問題求解算法

前言:

通過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>
           

(完)

繼續閱讀