simp_min_resh.js 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. function generate(){
  2. let rows =parseInt( document.getElementById("row").value);
  3. console.log(rows);
  4. let kof = parseInt(document.getElementById("kof").value);
  5. console.log(kof);
  6. let baz = parseInt(document.getElementById("baz").value);
  7. console.log(baz);
  8. let cols = 0;
  9. cols += kof;
  10. cols += baz;
  11. cols += 1;
  12. console.log(cols);
  13. var table = document.createElement('table');
  14. table.id ="kofi";
  15. table.style.width = '50px';
  16. table.style.border = '1px solid black';
  17. // Создаем тело таблицы
  18. var tbody = document.createElement('tbody');
  19. for (var i = 0; i < rows; i++) {
  20. var row = document.createElement('tr');
  21. for (var j = 0; j < cols; j++) {
  22. var cell = document.createElement('td');
  23. var input = document.createElement('input');
  24. input.type = "number";
  25. input.placeholder="x";
  26. input.style.width='30px';
  27. cell.appendChild(input);
  28. row.appendChild(cell);
  29. }
  30. tbody.appendChild(row);
  31. }
  32. table.appendChild(tbody);
  33. // Добавляем таблицу в блок с id "tableContainer"
  34. document.getElementById('table_gen').appendChild(table);
  35. var tabl = document.createElement('table');
  36. tabl.id ="otrico";
  37. tabl.style.width = '50px';
  38. tabl.style.border = '1px solid black';
  39. // Создаем тело таблицы
  40. var tbod = document.createElement('tbody');
  41. for (var i = 0; i < 1; i++) {
  42. var row = document.createElement('tr');
  43. for (var j = 0; j < cols; j++) {
  44. var cell = document.createElement('td');
  45. var input = document.createElement('input');
  46. input.type = "number";
  47. input.placeholder="-Коэффициент";
  48. input.style.width='120px';
  49. cell.appendChild(input);
  50. row.appendChild(cell);
  51. }
  52. tbod.appendChild(row);
  53. }
  54. tabl.appendChild(tbod);
  55. // Добавляем таблицу в блок с id "tableContainer"
  56. document.getElementById('otric').appendChild(tabl);
  57. }
  58. function inputtable(){
  59. var table= document.getElementById('kofi');
  60. var rows =table.querySelectorAll('tr');
  61. var constraint=[];
  62. rows.forEach(function(row) {
  63. var rowData = [];
  64. var cellic = row.querySelectorAll('td input');
  65. cellic.forEach(function(cell) {
  66. rowData.push(parseInt(cell.value, 10));
  67. });
  68. constraint.push(rowData);
  69. });
  70. console.log(constraint);
  71. let constraints = Array.from(constraint);
  72. var table1 = document.getElementById('otrico');
  73. var cells = table1.querySelectorAll('td input');
  74. var pos=[];
  75. cells.forEach(function(cell){
  76. pos.push(parseInt(cell.value, 10));
  77. });
  78. console.log(pos);
  79. let objectiveFunctionCoefficients = Array.from(pos);
  80. let m =parseInt( document.getElementById("row").value); // Количество ограничений
  81. console.log(m);
  82. let kof = parseInt(document.getElementById("kof").value);
  83. console.log(kof);
  84. let baz = parseInt(document.getElementById("baz").value);
  85. console.log(baz);
  86. let cols = 0;
  87. cols += kof;
  88. cols += baz;
  89. cols += 1;
  90. let n = cols-1; // Количество переменных
  91. console.log(m);
  92. console.log(n);
  93. let table2 = []; // Создаем таблицу для симплекс метода
  94. for(let i = 0; i < m+1; i++){
  95. table2 [i] =[];
  96. for(let j=0; j<n+1; j++){
  97. table2 [i][j]=0;
  98. }
  99. }
  100. console.log(table2);
  101. // Заполняем таблицу с учетом ограничений и целевой функции
  102. for (let i = 0; i < m; i++) {
  103. for (let j = 0; j < n; j++) {
  104. table2[i][j] = constraints[i][j];
  105. }
  106. table2[i][n] = constraints[i][n]; // Значения правой части ограничений
  107. }
  108. for (let j = 0; j < n; j++) {
  109. table2[m][j] = objectiveFunctionCoefficients[j]; // Коэффициенты целевой функции
  110. }
  111. while (true) {
  112. // Находим входящий разрешающий столбец
  113. let pivotColumn = -1;
  114. for (let j = 0; j < n; j++) {
  115. let max = table2[m][0];
  116. if (table2[m][j] > 0) {
  117. if (max > table2[m][j]) {
  118. max = table2[m][j];
  119. pivotColumn = j;
  120. } else {
  121. pivotColumn = j;
  122. }
  123. }
  124. }
  125. if (pivotColumn == -1) { // Если все коэффициенты целевой функции неотрицательны, завершаем метод
  126. break;
  127. }
  128. // Находим исходящую строку по минимальному отношению
  129. let pivotRow = -1;
  130. let minRatio = Number.MAX_VALUE;
  131. for (let i = 0; i < m; i++) {
  132. if (table2[i][pivotColumn] > 0) {
  133. let ratio = table2[i][n] / table2[i][pivotColumn];
  134. if (ratio < minRatio) {
  135. minRatio = ratio;
  136. pivotRow = i;
  137. }
  138. }
  139. }
  140. let pivotElement = table2[pivotRow][pivotColumn];
  141. for (let j = 0; j < n + 1; j++) {
  142. table2[pivotRow][j] /= pivotElement; // Делим строку на опорный элемент
  143. }
  144. // Обновляем таблицу
  145. for (let i = 0; i < m + 1; i++) {
  146. if (i !== pivotRow) {
  147. let multiplier = table2[i][pivotColumn];
  148. for (let j = 0; j < n + 1; j++) {
  149. table2[i][j] -= multiplier * table2[pivotRow][j]; // Вычитаем из всех строк кроме опорной
  150. }
  151. }
  152. }
  153. }
  154. console.log("Решение симплекс-методом:");
  155. console.log("Значение целевой функции: " + table2[m][n]);
  156. document.getElementById("result").textContent = table2[m][n];
  157. var tablee = document.createElement('table');
  158. tablee.id ="otvet";
  159. tablee.style.width = '100px';
  160. tablee.style.border = '1px solid black';
  161. // Создаем тело таблицы
  162. var tbodyy = document.createElement('tbody');
  163. for (var i = 0; i < m+1; i++) {
  164. var rowa = document.createElement('tr');
  165. for (var j = 0; j < n+1; j++) {
  166. var cell = document.createElement('td');
  167. cell.appendChild(document.createTextNode(table2[i][j]));
  168. rowa.appendChild(cell);
  169. }
  170. tbodyy.appendChild(rowa);
  171. }
  172. tablee.appendChild(tbodyy);
  173. // Добавляем таблицу в блок с id "tableContainer"
  174. document.getElementById('otvetik').appendChild(tablee);
  175. for (let i = 0; i < table2.length; i++) {
  176. console.log(table2[i].join(" \t "));
  177. }
  178. }