|
@@ -0,0 +1,114 @@
|
|
|
+using System;
|
|
|
+using System.Collections.Generic;
|
|
|
+using System.Diagnostics;
|
|
|
+using System.Linq;
|
|
|
+using System.Text;
|
|
|
+using System.Threading.Tasks;
|
|
|
+using System.IO;
|
|
|
+
|
|
|
+namespace MinElKuzminEkz
|
|
|
+{
|
|
|
+ internal class Program
|
|
|
+ {
|
|
|
+ private static StreamWriter traceWriter;
|
|
|
+ private static StreamWriter debugWriter;
|
|
|
+
|
|
|
+ public static void Main(string[] args)
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ // Открываем файлы для записи trace и debug логов
|
|
|
+ traceWriter = new StreamWriter("trace_log.txt");
|
|
|
+ debugWriter = new StreamWriter("debug_log.txt");
|
|
|
+
|
|
|
+ // Добавляем слушателя для Trace
|
|
|
+ Trace.Listeners.Add(new TextWriterTraceListener(traceWriter));
|
|
|
+ Trace.AutoFlush = true;
|
|
|
+
|
|
|
+ // Добавляем слушателя для Debug
|
|
|
+ Debug.Listeners.Add(new TextWriterTraceListener(debugWriter));
|
|
|
+ Debug.AutoFlush = true;
|
|
|
+
|
|
|
+ Trace.WriteLine("Файл успешно считан");
|
|
|
+
|
|
|
+ // Чтение данных из файла
|
|
|
+ string[] lines = File.ReadAllLines("C:\\Users\\7\\source\\repos\\methodMinimalElKuzmin\\methodMinimalElKuzmin\\test.txt");
|
|
|
+
|
|
|
+ // Инициализация массивов на основе данных из файла
|
|
|
+ int[] a = Array.ConvertAll(lines[0].Split(','), int.Parse);
|
|
|
+ int[] b = Array.ConvertAll(lines[1].Split(','), int.Parse);
|
|
|
+
|
|
|
+ double[,] costs = new double[3, 3];
|
|
|
+ // Заполнение матриц costs и supply_plan
|
|
|
+ int index = 2; // начинаем с третьей строки файла
|
|
|
+ for (int i = 0; i < 3; i++)
|
|
|
+ {
|
|
|
+ string[] costValues = lines[index].Split(',');
|
|
|
+ for (int j = 0; j < 3; j++)
|
|
|
+ {
|
|
|
+ costs[i, j] = double.Parse(costValues[j]);
|
|
|
+ }
|
|
|
+ index++;
|
|
|
+ }
|
|
|
+
|
|
|
+ Trace.WriteLine("Матрица инициализирована");
|
|
|
+
|
|
|
+ if (Utility.CheckClosure(a, b))
|
|
|
+ {
|
|
|
+ Console.WriteLine("Транспортная задача является закрытой");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ Console.WriteLine("Транспортная задача является открытой");
|
|
|
+ }
|
|
|
+
|
|
|
+ // Применение метода
|
|
|
+ int[,] supply_plan = Utility.MinElementMethod(a, b, costs); //MinElementMethod
|
|
|
+
|
|
|
+ // Вывод плана поставок
|
|
|
+ for (int i = 0; i < supply_plan.GetLength(0); i++)
|
|
|
+ {
|
|
|
+ for (int j = 0; j < supply_plan.GetLength(1); j++)
|
|
|
+ {
|
|
|
+ Console.Write($"{supply_plan[i, j]} ");
|
|
|
+ }
|
|
|
+ Console.WriteLine();
|
|
|
+ }
|
|
|
+
|
|
|
+ // Проверка на вырожденность опорного плана
|
|
|
+ if (Utility.CheckIfVyrozhdeno(supply_plan))
|
|
|
+ {
|
|
|
+ Console.WriteLine("Опорный план вырожденный.");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ Console.WriteLine("Опорный план невырожденный.");
|
|
|
+ }
|
|
|
+
|
|
|
+ // Расчёт целевой функции
|
|
|
+ Console.WriteLine($"Целевая функция: {Utility.CalculateCelevayaFunction(costs, supply_plan)}");
|
|
|
+
|
|
|
+ Console.WriteLine("Опорный план оптимален.");
|
|
|
+
|
|
|
+ Trace.WriteLine("Программа успешно завершила рассчет");
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ Trace.WriteLine($"Error: {ex.Message}");
|
|
|
+ Console.WriteLine($"Error: {ex.Message}");
|
|
|
+ }
|
|
|
+ finally
|
|
|
+ {
|
|
|
+ // Закрываем файлы после использования
|
|
|
+ traceWriter.Close();
|
|
|
+ debugWriter.Close();
|
|
|
+ Console.ReadKey();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|