예제 #1
0
 private void btnLeerModelo_Click(object sender, EventArgs e)
 {
     openFileDialog1.ShowDialog();
     Modelo = new ModeloPL();
     Modelo.Leer(openFileDialog1.FileName);
     CargarEnPantalla();
 }
예제 #2
0
        private void CargarModelo()
        {
            int NroVariables = int.Parse(txtNroVariables.Text);
            int NroRestricciones = int.Parse(txtNroRestricciones.Text);
            double[] c = new double[NroVariables];
            double[] b = new double[NroRestricciones];
            double[,] A = new double[NroRestricciones, NroVariables];

            for (int i = 0; i < NroVariables; i++)
            {
                c[i] = double.Parse(dGVc[i, 0].Value.ToString());
            }

            for (int i = 0; i < NroRestricciones; i++)
            {
                b[i] = double.Parse(dGVAb[NroVariables, i].Value.ToString());
            }

            for (int i = 0; i < NroRestricciones; i++)
            {
                for (int j = 0; j < NroVariables; j++)
                {
                    A[i, j] = double.Parse(dGVAb[j, i].Value.ToString());
                }
            }

            Modelo = new ModeloPL(txtNombre.Text,txtArchivo.Text, c, b, A);
        }
예제 #3
0
        public void InformeCompleto(ModeloPL Modelo)
        {
            this.toolStripStatusLabel1.Text = "Modelo " + Modelo.Nombre;

            Simplex lp = new Simplex(Modelo);

            txtResultado.Text = "Resultado : \r\n";
            txtResultado.Text = txtResultado.Text + "-------------------------------------------------------------------------\r\n";
            txtResultado.Text = txtResultado.Text + "Optimo = " + lp.valueopt().ToString() + "\r\n";

            double[] x = lp.primal();
            txtResultado.Text = txtResultado.Text + "Primal : \r\n";
            for (int i = 0; i < x.Length; i++)
            {
                txtResultado.Text = txtResultado.Text + "x[" + i + "] = " + x[i].ToString() + "\r\n";
            }

            double[] y = lp.dual();
            txtResultado.Text = txtResultado.Text + "Dual : \r\n";
            for (int j = 0; j < y.Length; j++)
            {
                txtResultado.Text = txtResultado.Text + "y[" + j + "] = " + y[j].ToString() + "\r\n";
            }

            lp.show();
            txtResultado.Text = txtResultado.Text + lp.Resultado;
        }
예제 #4
0
 public void Mostrar(ref ModeloPL pModelo)
 {
     if (pModelo != null)
     {
         Modelo = pModelo;
         CargarEnPantalla();
     }
     this.ShowDialog();
     pModelo= Modelo;
 }
예제 #5
0
        // Establecer la matriz (tableaux) inicial del Simplex a partir de objeto modelo
        public Simplex(ModeloPL Modelo)
        {
            M = Modelo.NroRestricciones;
            N = Modelo.NroVariables;
            a = new double[M + 1, N + M + 1];
            for (int i = 0; i < M; i++)
            {
                for (int j = 0; j < N; j++)
                {
                    a[i, j] = Modelo.A[i, j];
                }
            }
            for (int i = 0; i < M; i++)
            {
                a[i, N + i] = 1.0;
            }
            for (int j = 0; j < N; j++)
            {
                a[M, j] = Modelo.c[j];
            }
            for (int i = 0; i < M; i++)
            {
                a[i, M + N] = Modelo.b[i];
            }

            basis = new int[M];
            for (int i = 0; i < M; i++)
            {
                basis[i] = N + i;
            }

            _PasoAPaso = "";
            _PasoAPaso = _PasoAPaso + "-------------------------------------------------------------------------\r\n";
            _PasoAPaso = _PasoAPaso + "Matriz Simplex inicial: \r\n";

            _PasoAPaso = _PasoAPaso + "Colum." + "\t";
            for (int j = 0; j <= M + N; j++)
            {
                _PasoAPaso = _PasoAPaso + (j == M + N ? "Sol." : (j >= N && j < M + N ? "s" : "x") + j.ToString()) + "\t";
            }
            _PasoAPaso = _PasoAPaso + "\r\n";

            for (int i = 0; i <= M; i++)
            {
                _PasoAPaso = _PasoAPaso + (i == M ? "Z" : "f" + i.ToString() + " " + (basis[i] < N ? "x" : "s") + basis[i].ToString()) + "\t";

                for (int j = 0; j <= M + N; j++)
                {
                    _PasoAPaso = _PasoAPaso + a[i, j].ToString("F3") + "\t";
                }
                _PasoAPaso = _PasoAPaso + "\r\n";
            }

            solve();
        }
예제 #6
0
 // No acotada
 public void InformeCompleto3()
 {
     double[] c = { 2.0, 3.0, -1.0, -12.0 };
     double[] b = { 3.0, 2.0 };
     double[,] A =
     {
         { -2.0, -9.0,  1.0,  9.0 },
         {  1.0,  1.0, -1.0, -2.0 },
     };
     Modelo = new ModeloPL("Ejemplo2", "-", c, b, A);
     InformeCompleto(Modelo);
 }
예제 #7
0
 // x0 = 12, x1 = 28, opt = 800
 public void InformeCompleto2()
 {
     double[] c = { 13.0, 23.0 };
     double[] b = { 480.0, 160.0, 1190.0 };
     double[,] A =
     {
         {  5.0, 15.0 },
         {  4.0,  4.0 },
         { 35.0, 20.0 },
     };
     Modelo = new ModeloPL("Ejemplo2", "-", c, b, A);
     InformeCompleto(Modelo);
 }
예제 #8
0
 // Degeneración - Se hace un ciclo si se elige el coeficiente mas positivo
 public void InformeCompleto4()
 {
     double[] c = { 10.0, -57.0, -9.0, -24.0 };
     double[] b = { 0.0, 0.0, 1.0 };
     double[,] A =
     {
         { 0.5, -5.5, -2.5, 9.0 },
         { 0.5, -1.5, -0.5, 1.0 },
         { 1.0,  0.0,  0.0, 0.0 },
     };
     Modelo = new ModeloPL("Degeneración", "-", c, b, A);
     InformeCompleto(Modelo);
 }
예제 #9
0
 public void ReddyMikks()
 {
     double[] c = { 5.0, 4.0 };
     double[] b = { 24.0, 6.0, 1.0, 2.0 };
     double[,] A =
     {
         {  6.0, 4.0 },
         {  1.0, 2.0 },
         { -1.0, 1.0 },
         {  0.0, 1.0 }
     };
     Modelo = new ModeloPL("Reddy Mikks", "-", c, b, A);
     InformeCompleto(Modelo);
 }
예제 #10
0
        public void InformeCompleto1()
        {
            double[,] A =
            {
                { -1,  1, 0 },
                {  1,  4, 0 },
                {  2,  1, 0 },
                {  3, -4, 0 },
                {  0,  0, 1 },
            };
            double[] c = { 1, 1, 1 };
            double[] b = { 5, 45, 27, 24, 4 };
            Modelo = new ModeloPL("Ejemplo1", "-", c, b, A);

            InformeCompleto(Modelo);
        }