예제 #1
0
        private void button5_Click(object sender, EventArgs e)
        {
            double flujo_r = 0;

            makefba.Fba(sbml, Funcion_obj, pd);
            z = makefba.Lp.GetObjectiveValue();


            string[] aux_flujos = new String[sbml.ListReaction.Length];
            for (int j = 0; j < sbml.ListReaction.Length; j++)
            {
                aux_flujos[j] = makefba.Lp.GetColPrimal(j + 1).ToString();
            }
            int pos = 1;



            for (int i = 0; i < sbml.ListReaction.Length; i++)//
            {
                if (makefba.Lp.GetColPrimal(i + 1) < 9000 && makefba.Lp.GetColPrimal(i + 1) > -9000)
                {
                    flujo_r = makefba.Lp.GetColPrimal(i + 1);
                    pos     = i;


                    double viejo_low = sbml.ListReaction[i].LowerBound; //
                    double viejo_up  = sbml.ListReaction[i].UpperBound; //
                    double nuevo_low = 0;
                    double nuevo_up  = 0;
                    if (flujo_r == 0)
                    {
                        nuevo_low = 0.002;
                        nuevo_up  = 0.003;
                    }
                    else
                    {
                        nuevo_low = flujo_r * 1 / 100;
                        nuevo_low = flujo_r - nuevo_low;
                        nuevo_up  = flujo_r * 1.1 / 100;
                        nuevo_up  = flujo_r - nuevo_up;
                    }
                    sbml.ListReaction[i].LowerBound = nuevo_low; //
                    sbml.ListReaction[i].UpperBound = nuevo_up;  //
                    MakeFba makefba_shadows = new MakeFba();
                    makefba_shadows.Fba(sbml, Funcion_obj, pd);  //
                    double z_prima = makefba_shadows.Lp.GetObjectiveValue();


                    double aux     = makefba_shadows.Lp.GetColPrimal(pos + 1);
                    double shadows = (z - z_prima) / (flujo_r - makefba_shadows.Lp.GetColPrimal(pos + 1));
                    if (flujo_r - makefba_shadows.Lp.GetColPrimal(pos + 1) != 0)
                    {
                        string[] str = new string[3] {
                            sbml.ListReaction[i].Id, aux_flujos[i], shadows.ToString()
                        };
                        ListViewItem list = new ListViewItem(str);
                        resultlist.Items[pos + 1] = list;
                    }
                    else
                    {
                        string[] str = new string[3] {
                            sbml.ListReaction[i].Id, aux_flujos[i], "Infinito."
                        };
                        ListViewItem list = new ListViewItem(str);
                        resultlist.Items[pos + 1] = list;
                    }

                    sbml.ListReaction[i].LowerBound = viejo_low;
                    sbml.ListReaction[i].UpperBound = viejo_up;
                }
            }
        }
예제 #2
0
        private void button2_Click(object sender, EventArgs e)
        {
            if (reactionObjetiveComboBox.Text.Length > 0)
            {
                makefba = new MakeFba();

                int i = 0;

                bool find = false;

                foreach (Reaction item in sbml.ListReaction)
                {
                    if (item.Id == reactionObjetiveComboBox.Text)
                    {
                        reactionoptimize = reactionObjetiveComboBox.Text;

                        find = true;

                        break;
                    }
                    i++;
                }
                if (find)
                {
                    if (radiomax.Checked)
                    {
                        pd = OptimisationDirection.MAXIMISE;
                    }
                    else
                    {
                        pd = OptimisationDirection.MINIMISE;
                    }
                    Funcion_obj = i;
                    makefba.Fba(sbml, i, pd);

                    double z = makefba.Lp.GetObjectiveValue();

                    resultlist.Items.Clear();

                    string[] str = new string[2] {
                        "Z = " + reactionObjetiveComboBox.Text, z.ToString()
                    };

                    ListViewItem list = new ListViewItem(str);
                    resultlist.Items.Add(list);

                    for (int k = 0; k < sbml.ListReaction.Length; k++)
                    {
                        str = new string[2] {
                            sbml.ListReaction[k].Id, makefba.Lp.GetColPrimal(k + 1).ToString()
                        };

                        list = new ListViewItem(str);
                        resultlist.Items.Add(list);
                    }
                    results         = true;
                    button5.Enabled = true;
                    button3.Enabled = true;
                }
                else
                {
                    results         = false;
                    button3.Enabled = false;
                    MessageBox.Show("This reaction not exist in the model", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
            {
                MessageBox.Show("Select the function to optimize", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }