Динамическое программирование задача оптимального распределения ресурсов C#
Автор: SpotL1ght • Ноябрь 17, 2018 • Лабораторная работа • 3,584 Слов (15 Страниц) • 1,564 Просмотры
Динамическое программирование задача оптимального распределения ресурсов C#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace opt_res
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private int columns; //количество столбцов
private int rows; //количество строк
private double[,] mass; //входная матрица
private double[] vect; // входные ресурсы
private void calculate()
{
if (mass == null)
return;
List<double> a = new List<double>();
List<double> b = new List<double>();
List<double> c = new List<double>();
List<KeyValuePair<double, double>> n = new List<KeyValuePair<double, double>>();
KeyValuePair<double, double> par;
List<List<KeyValuePair<double, double>>> list = new List<List<KeyValuePair<double, double>>>();
for(int i = 0; i < rows; i++)
{
a.Add(mass[i,0]);
}
for (int i = 0; i < rows; i++)
{
par = new KeyValuePair<double, double>(vect[i], mass[i, 0]);
n.Add(par);
}
list.Add(n);
n = new List<KeyValuePair<double, double>>();
//n.Clear();
c.Add(0);
n.Add(par = new KeyValuePair<double, double>(0, 0));
int colnumb = 1;
double max = -1;
int rindx = 2;
int res = 0;
for (int i = 0; i < columns - 1; i++)
{
for (int jnd = 0; jnd < rows; jnd++)
{
b.Add(mass[jnd, colnumb]);
}
for (int j = 0; j < a.Count - 1; j++)
{
int l = rindx - 1;
for (int z = 0; z < rindx; z++)
{
if (b[z] + a[l] > max)
{
max = a[l] + b[z];
res = z;
}
l--;
}
c.Add(max);
par = new KeyValuePair<double, double>(vect[res],max);
n.Add(par);
rindx++;
}
list.Add(n);
b.Clear();
rindx = 2;
max = -1;
colnumb++;
a = c;
if (i + 1 == columns - 1)
break;
c = new List<double>();
n = new List<KeyValuePair<double, double>>();
n.Add(par = new KeyValuePair<double, double>(0, 0));
c.Add(0);
}
double res1 = 200;
max = -1;
double supmax = 0;
int indx =0;
int jndx =0;
while (res1
...