예제 #1
0
        private void button1_Click(object sender, EventArgs e)
        {
            this.SimplexMatrixes.Clear();

            List <List <object> > data = new List <List <object> >();

            object[] req = new object[inputData.Last().GetUpperBound(0)];

            object[] stocks = new object[inputData.Count - 1];

            for (int i = 0; i < inputData.Count - 1; i++)
            {
                int tail = inputData[i].GetUpperBound(0) - 1;
                data.Add(new List <object>());
                for (int j = 0; j < tail; j++)
                {
                    data[i].Add(cell(i, j + 1));
                }
                stocks[i] = cell(i, tail + 1);
            }

            for (int i = 0; i < inputData.Last().GetUpperBound(0); i++)
            {
                req[i] = cell(inputData.Count - 1, i + 1);
            }

            NorthWest nw            = new NorthWest(data, req, stocks);
            LowCost   lc            = new LowCost(data, req, stocks);
            Vogel     FliegtNachSüd = new Vogel(data, req, stocks);

            methods.Clear();

            methods.Add(nw);
            methods.Add(lc);
            methods.Add(FliegtNachSüd);

            IRouteSolveMethod optimum = FliegtNachSüd;

            foreach (IRouteSolveMethod m in methods)
            {
                var table = DrawSimplexTable(m);
                this.SimplexMatrixes.Add(table);
                if ((double)m.BasisResult < (double)optimum.BasisResult)
                {
                    optimum = m;
                }
            }



            AnswerLabel.Text  = "Ответ: ";
            AnswerLabel.Text += optimum.BasisResult.ToString();
            setVisibility(true);
        }
예제 #2
0
        private DataGridView DrawSimplexTable(IRouteSolveMethod solution)
        {
            DataGridView table = new DataGridView();

            table.Columns.Add("a", "Поставщики");

            for (int i = 0; i < solution.Rows[0].CellCount; i++)
            {
                table.Columns.Add("B" + (i + 1).ToString(), "B" + (i + 1).ToString());
            }

            for (int i = 0; i < solution.Rows.Length; i++)
            {
                object[] row = new object[solution.Rows[i].Cells.Length + 1];
                row[0] = "A" + (i + 1).ToString();
                for (int j = 0; j < solution.Rows[i].Cells.Length; j++)
                {
                    row[j + 1] = solution.Rows[i].Cells[j].Value;
                }
                table.Rows.Add(row);
            }

            return(table);
        }