let constraints = new Array(n).fill(null).map(() => new Array(k + p + 1)); let objectiveFunctionCoefficients = new Array(k + p + 1); for (let i = 0; i < k; i++) { console.log("Введите отрицательные коэффициенты"); objectiveFunctionCoefficients[i] = parseInt(prompt()); } for (let i = k; i < objectiveFunctionCoefficients.length; i++) { objectiveFunctionCoefficients[i] = 0; } let m = constraints.length; // Количество ограничений let n = constraints[0].length - 1; // Количество переменных let table = new Array(m + 1).fill(null).map(() => new Array(n + 1)); // Создаем таблицу для симплекс метода // Заполняем таблицу с учетом ограничений и целевой функции for (let i = 0; i < m; i++) { for (let j = 0; j < n; j++) { table[i][j] = constraints[i][j]; } table[i][n] = constraints[i][n]; // Значения правой части ограничений } for (let j = 0; j < n; j++) { table[m][j] = objectiveFunctionCoefficients[j]; // Коэффициенты целевой функции } while (true) { // Находим входящий разрешающий столбец let pivotColumn = -1; for (let j = 0; j < n; j++) { let min = table[m][0]; if (table[m][j] < 0) { if (min > table[m][j]) { min = table[m][j]; pivotColumn = j; } else { pivotColumn = j; } } } if (pivotColumn == -1) { // Если все коэффициенты целевой функции неотрицательны, завершаем метод break; } // Находим исходящую строку по минимальному отношению let pivotRow = -1; let minRatio = Number.MAX_VALUE; for (let i = 0; i < m; i++) { if (table[i][pivotColumn] > 0) { let ratio = table[i][n] / table[i][pivotColumn]; if (ratio < minRatio) { minRatio = ratio; pivotRow = i; } } } if (pivotRow == -1) { // Если отношение не существует, задача неограничена throw new Error("Решение неограничено"); } let pivotElement = table[pivotRow][pivotColumn]; for (let j = 0; j < n + 1; j++) { table[pivotRow][j] /= pivotElement; // Делим строку на опорный элемент } // Обновляем таблицу for (let i = 0; i < m + 1; i++) { if (i !== pivotRow) { let multiplier = table[i][pivotColumn]; for (let j = 0; j < n + 1; j++) { table[i][j] -= multiplier * table[pivotRow][j]; // Вычитаем из всех строк кроме опорной } } } } console.log("Решение симплекс-методом:"); console.log("Значение целевой функции: " + table[m][n]); for (let i = 0; i < table.length; i++) { for (let j = 0; j < table[0].length; j++) { console.log(table[i][j] + " "); } console.log(); }