min_el.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375
  1. function generate(){
  2. var rows = document.getElementById("row").value;
  3. console.log(rows);
  4. var cols = document.getElementById("col").value;
  5. console.log(cols);
  6. var table = document.createElement('table');
  7. table.id ="tarif";
  8. table.style.width = '100px';
  9. table.style.border = '1px solid black';
  10. // Создаем тело таблицы
  11. var tbody = document.createElement('tbody');
  12. for (var i = 0; i < rows; i++) {
  13. var row = document.createElement('tr');
  14. for (var j = 0; j < cols; j++) {
  15. var cell = document.createElement('td');
  16. var input = document.createElement('input');
  17. input.type = "number";
  18. input.placeholder="тариф";
  19. cell.appendChild(input);
  20. row.appendChild(cell);
  21. }
  22. tbody.appendChild(row);
  23. }
  24. table.appendChild(tbody);
  25. // Добавляем таблицу в блок с id "tableContainer"
  26. document.getElementById('table_gen').appendChild(table);
  27. var tabl = document.createElement('table');
  28. tabl.id ="potreb";
  29. tabl.style.width = '100px';
  30. tabl.style.border = '1px solid black';
  31. // Создаем тело таблицы
  32. var tbod = document.createElement('tbody');
  33. for (var i = 0; i < 1; i++) {
  34. var row = document.createElement('tr');
  35. for (var j = 0; j < cols; j++) {
  36. var cell = document.createElement('td');
  37. var input = document.createElement('input');
  38. input.type = "number";
  39. input.placeholder="потребитель";
  40. cell.appendChild(input);
  41. row.appendChild(cell);
  42. }
  43. tbod.appendChild(row);
  44. }
  45. tabl.appendChild(tbod);
  46. // Добавляем таблицу в блок с id "tableContainer"
  47. document.getElementById('pred_gen').appendChild(tabl);
  48. var tabi = document.createElement('table');
  49. tabi.id ="postav";
  50. tabi.style.width = '100px';
  51. tabi.style.border = '1px solid black';
  52. // Создаем тело таблицы
  53. var tbo = document.createElement('tbody');
  54. for (var i = 0; i < 1; i++) {
  55. var ro = document.createElement('tr');
  56. for (var j = 0; j < cols; j++) {
  57. var cell = document.createElement('td');
  58. var input = document.createElement('input');
  59. input.type = "number";
  60. input.placeholder="склад";
  61. cell.appendChild(input);
  62. ro.appendChild(cell);
  63. }
  64. tbo.appendChild(ro);
  65. }
  66. tabi.appendChild(tbo);
  67. // Добавляем таблицу в блок с id "tableContainer"
  68. document.getElementById('table_postav').appendChild(tabi);
  69. }
  70. function inputtable(){
  71. var table1 = document.getElementById('postav');
  72. var cells = table1.querySelectorAll('td input');
  73. var pos=[];
  74. cells.forEach(function(cell){
  75. pos.push(parseInt(cell.value, 10));
  76. });
  77. console.log(pos);
  78. var table2 = document.getElementById('potreb');
  79. var celli = table2.querySelectorAll('td input');
  80. var pot=[];
  81. celli.forEach(function(cell){
  82. pot.push(parseInt(cell.value, 10));
  83. });
  84. console.log(pot);
  85. var table3 = document.getElementById('tarif');
  86. var rows =table3.querySelectorAll('tr');
  87. var tari=[];
  88. rows.forEach(function(row) {
  89. var rowData = []; // Создаем временный массив для хранения данных из текущей строки
  90. // Получаем все ячейки текущей строки
  91. var cellic = row.querySelectorAll('td input');
  92. // Проходимся по каждой ячейке и добавляем ее значение во временный массив
  93. cellic.forEach(function(cell) {
  94. rowData.push(parseInt(cell.value, 10)); // Преобразуем значение в число и добавляем его во временный массив
  95. });
  96. // Добавляем временный массив в основной двумерный массив
  97. tari.push(rowData);
  98. });
  99. let post = Array.from(pos);
  100. let potr = Array.from(pot);
  101. let tarif = Array.from(tari);
  102. console.log(tarif);
  103. let n=0;
  104. let m=0;
  105. for(let i = 0; i < post.length; i++){
  106. n++;
  107. }
  108. for(let i = 0; i < potr.length; i++){
  109. m++;
  110. }
  111. let tarif1= [];
  112. for(let i = 0; i < n; i++){
  113. tarif1[i] =[];
  114. for(let j=0; j<m; j++){
  115. tarif1[i][j]=0;
  116. }
  117. }
  118. let tar = tarif.slice();
  119. let sum = 0;
  120. let count = 0;
  121. while (post.reduce((acc, val) => acc + val, 0) > 0 && potr.reduce((acc, val) => acc + val, 0) > 0) {
  122. let buffI = 0;
  123. let buffJ = 0;
  124. let min = 999999;
  125. for (let i = 0; i < tarif.length; i++) {
  126. for (let j = 0; j < tarif[i].length; j++) {
  127. if (tarif[i][j] < min) {
  128. if (potr[j] > 0 && post[i] > 0) {
  129. buffJ = j;
  130. buffI = i;
  131. min = tarif[i][j];
  132. }
  133. }
  134. }
  135. }
  136. if (post[buffI] >= potr[buffJ]) {
  137. tar[buffI][buffJ] = tarif[buffI][buffJ];
  138. tarif1[buffI][buffJ] = potr[buffJ];
  139. post[buffI] -= potr[buffJ];
  140. potr[buffJ] = 0;
  141. sum += tarif1[buffI][buffJ] * min;
  142. count++;
  143. } else if (post[buffI] < potr[buffJ] && post[buffI] !== 0) {
  144. tar[buffI][buffJ] = tarif[buffI][buffJ];
  145. potr[buffJ] -= post[buffI];
  146. tarif1[buffI][buffJ] = post[buffI];
  147. post[buffI] = 0;
  148. sum += tarif1[buffI][buffJ] * min;
  149. count++;
  150. }
  151. }
  152. // if(count == vir){
  153. // console.log("опорный план вырожденный");
  154. // }
  155. // else{
  156. // console.log("опорный план невырожденный");
  157. // }
  158. console.log("Целевая функция = " + sum);
  159. console.log("Матрица совершенных поставок:");
  160. for (let i = 0; i < tarif1.length; i++) {
  161. console.log(tarif1[i].join(" \t "));
  162. }
  163. var tablee = document.createElement('table');
  164. tablee.id ="otvet";
  165. tablee.style.width = '100px';
  166. tablee.style.border = '1px solid black';
  167. // Создаем тело таблицы
  168. var tbodyy = document.createElement('tbody');
  169. for (var i = 0; i < n; i++) {
  170. var rowa = document.createElement('tr');
  171. for (var j = 0; j < m; j++) {
  172. var cell = document.createElement('td');
  173. cell.appendChild(document.createTextNode(tarif1[i][j]));
  174. rowa.appendChild(cell);
  175. }
  176. tbodyy.appendChild(rowa);
  177. }
  178. tablee.appendChild(tbodyy);
  179. // Добавляем таблицу в блок с id "tableContainer"
  180. document.getElementById('otvet').appendChild(tablee);
  181. document.getElementById("result").textContent = sum;
  182. }
  183. function handleFile() {
  184. const fileInput = document.getElementById('csvFileInput');
  185. const file = fileInput.files[0];
  186. const reader = new FileReader();
  187. reader.onload = function(event) {
  188. const content = event.target.result;
  189. processData(content);
  190. };
  191. reader.readAsText(file);
  192. }
  193. function processData(content) {
  194. const lines = content.split('\n');
  195. const header = lines[0].split(';');
  196. let postt = [];
  197. let pottr = [];
  198. let tarif = [];
  199. for (let i = 1; i < lines.length; i++) {
  200. if (lines[i].trim() !== '') {
  201. const values = lines[i].split(';').map(Number);
  202. if (i === 1) {
  203. postt.push(values);
  204. } else if (i === 2) {
  205. pottr.push(values);
  206. } else {
  207. tarif.push(values);
  208. }
  209. }
  210. }
  211. console.log('Первый числовой массив:', postt);
  212. console.log('Второй числовой массив:', pottr);
  213. console.log('Двумерный массив:', tarif);
  214. let n=0;
  215. let m=0;
  216. for(let i =0; i< postt.length;i++){
  217. let s=0;
  218. for(let j =0; j<postt[i].length;j++ ){
  219. s++;
  220. }
  221. n =s;
  222. }
  223. for(let i =0; i< pottr.length;i++){
  224. let ss=0;
  225. for(let j =0; j<pottr[i].length;j++ ){
  226. ss++;
  227. }
  228. m =ss;
  229. }
  230. console.log(n);
  231. console.log(m);
  232. let potr=[];
  233. for(let i =0; i< m;i++){
  234. potr[i]=pottr[0][i];
  235. }
  236. console.log(potr);
  237. let post=[];
  238. for(let i =0; i< n;i++){
  239. post[i]=postt[0][i];
  240. }
  241. let tarif1= [];
  242. for(let i = 0; i < n; i++){
  243. tarif1[i] =[];
  244. for(let j=0; j<m; j++){
  245. tarif1[i][j]=0;
  246. }
  247. }
  248. console.log(post);
  249. console.log(tarif1);
  250. let tar = tarif.slice();
  251. console.log(tar);
  252. let sum = 0;
  253. let count = 0;
  254. while (post.reduce((acc, val) => acc + val, 0) > 0 && potr.reduce((acc, val) => acc + val, 0) > 0) {
  255. let buffI = 0;
  256. let buffJ = 0;
  257. let min = 999999;
  258. for (let i = 0; i < tarif.length; i++) {
  259. for (let j = 0; j < tarif[i].length; j++) {
  260. if (tarif[i][j] < min) {
  261. if (potr[j] > 0 && post[i] > 0) {
  262. buffJ = j;
  263. buffI = i;
  264. min = tarif[i][j];
  265. }
  266. }
  267. }
  268. }
  269. if (post[buffI] >= potr[buffJ]) {
  270. tar[buffI][buffJ] = tarif[buffI][buffJ];
  271. tarif1[buffI][buffJ] = potr[buffJ];
  272. post[buffI] -= potr[buffJ];
  273. potr[buffJ] = 0;
  274. sum += tarif1[buffI][buffJ] * min;
  275. count++;
  276. } else if (post[buffI] < potr[buffJ] && post[buffI] !== 0) {
  277. tar[buffI][buffJ] = tarif[buffI][buffJ];
  278. potr[buffJ] -= post[buffI];
  279. tarif1[buffI][buffJ] = post[buffI];
  280. post[buffI] = 0;
  281. sum += tarif1[buffI][buffJ] * min;
  282. count++;
  283. }
  284. }
  285. // if(count == vir){
  286. // console.log("опорный план вырожденный");
  287. // }
  288. // else{
  289. // console.log("опорный план невырожденный");
  290. // }
  291. console.log("Целевая функция = " + sum);
  292. console.log("Матрица совершенных поставок:");
  293. for (let i = 0; i < tarif1.length; i++) {
  294. console.log(tarif1[i].join(" \t "));
  295. }
  296. var tablee = document.createElement('table');
  297. tablee.id ="otvet";
  298. tablee.style.width = '100px';
  299. tablee.style.border = '1px solid black';
  300. // Создаем тело таблицы
  301. var tbodyy = document.createElement('tbody');
  302. for (var i = 0; i < n; i++) {
  303. var rowa = document.createElement('tr');
  304. for (var j = 0; j < m; j++) {
  305. var cell = document.createElement('td');
  306. cell.appendChild(document.createTextNode(tarif1[i][j]));
  307. rowa.appendChild(cell);
  308. }
  309. tbodyy.appendChild(rowa);
  310. }
  311. tablee.appendChild(tbodyy);
  312. // Добавляем таблицу в блок с id "tableContainer"
  313. document.getElementById('otvett').appendChild(tablee);
  314. document.getElementById("resultt").textContent = sum;
  315. }