// 最適化処理
        public SolverResult Simplex(bool messageFlg = true)
        {
            glp_smcp smcp = new glp_smcp();

            GLPK.glp_init_smcp(smcp);
            if (!messageFlg)
            {
                smcp.msg_lev = GLPK.GLP_MSG_OFF;
            }
            return((SolverResult)GLPK.glp_simplex(problem, smcp));
        }
예제 #2
0
파일: lp.cs 프로젝트: xypron/glpk-cli
    static void Main(string[] args)
    {
        glp_prob lp;
        glp_smcp parm;
        SWIGTYPE_p_int ind;
        SWIGTYPE_p_double val;
        int ret;

        try {

            lp = GLPK.glp_create_prob ();
            Console.WriteLine ("Problem created");

            // Define columns
            GLPK.glp_add_cols (lp, 3);
            GLPK.glp_set_col_name (lp, 1, "x1");
            GLPK.glp_set_col_kind (lp, 1, GLPK.GLP_CV);
            GLPK.glp_set_col_bnds (lp, 1, GLPK.GLP_DB, 0, .5);
            GLPK.glp_set_col_name (lp, 2, "x2");
            GLPK.glp_set_col_kind (lp, 2, GLPK.GLP_CV);
            GLPK.glp_set_col_bnds (lp, 2, GLPK.GLP_DB, 0, .5);
            GLPK.glp_set_col_name (lp, 3, "x3");
            GLPK.glp_set_col_kind (lp, 3, GLPK.GLP_CV);
            GLPK.glp_set_col_bnds (lp, 3, GLPK.GLP_DB, 0, .5);

            // Create constraints

            // Allocate memory
            ind = GLPK.new_intArray (3);
            val = GLPK.new_doubleArray (3);

            // Create rows
            GLPK.glp_add_rows (lp, 2);

            // Set row details
            GLPK.glp_set_row_name (lp, 1, "c1");
            GLPK.glp_set_row_bnds (lp, 1, GLPK.GLP_DB, 0, 0.2);
            GLPK.intArray_setitem (ind, 1, 1);
            GLPK.intArray_setitem (ind, 2, 2);
            GLPK.doubleArray_setitem (val, 1, 1.0);
            GLPK.doubleArray_setitem (val, 2, -.5);
            GLPK.glp_set_mat_row (lp, 1, 2, ind, val);

            GLPK.glp_set_row_name (lp, 2, "c2");
            GLPK.glp_set_row_bnds (lp, 2, GLPK.GLP_UP, 0, 0.4);
            GLPK.intArray_setitem (ind, 1, 2);
            GLPK.intArray_setitem (ind, 2, 3);
            GLPK.doubleArray_setitem (val, 1, -1.0);
            GLPK.doubleArray_setitem (val, 2, 1.0);
            GLPK.glp_set_mat_row (lp, 2, 2, ind, val);

            // Free memory
            GLPK.delete_intArray (ind);
            GLPK.delete_doubleArray (val);

            // Define objective
            GLPK.glp_set_obj_name (lp, "z");
            GLPK.glp_set_obj_dir (lp, GLPK.GLP_MIN);
            GLPK.glp_set_obj_coef (lp, 0, 1.0);
            GLPK.glp_set_obj_coef (lp, 1, -.5);
            GLPK.glp_set_obj_coef (lp, 2, .5);
            GLPK.glp_set_obj_coef (lp, 3, -1);

            // Solve model
            parm = new glp_smcp ();
            GLPK.glp_init_smcp (parm);
            ret = GLPK.glp_simplex (lp, parm);

            // Retrieve solution
            if (ret == 0) {
                write_lp_solution (lp);
            } else {
                Console.WriteLine ("The problem could not be solved");
            }

            // Free memory
            GLPK.glp_delete_prob (lp);

        } catch (GlpkException ex) {
            Console.WriteLine ("Error caught");
            ret = 1;
        }

        Environment.Exit (ret);
    }
예제 #3
0
파일: lp.cs 프로젝트: chyng2000/pro
    static void Main(string[] args)
    {
        glp_prob          lp;
        glp_smcp          parm;
        SWIGTYPE_p_int    ind;
        SWIGTYPE_p_double val;
        int ret;

        try {
            lp = GLPK.glp_create_prob();
            Console.WriteLine("Problem created");

            // Define columns
            GLPK.glp_add_cols(lp, 3);
            GLPK.glp_set_col_name(lp, 1, "x1");
            GLPK.glp_set_col_kind(lp, 1, GLPK.GLP_CV);
            GLPK.glp_set_col_bnds(lp, 1, GLPK.GLP_DB, 0, .5);
            GLPK.glp_set_col_name(lp, 2, "x2");
            GLPK.glp_set_col_kind(lp, 2, GLPK.GLP_CV);
            GLPK.glp_set_col_bnds(lp, 2, GLPK.GLP_DB, 0, .5);
            GLPK.glp_set_col_name(lp, 3, "x3");
            GLPK.glp_set_col_kind(lp, 3, GLPK.GLP_CV);
            GLPK.glp_set_col_bnds(lp, 3, GLPK.GLP_DB, 0, .5);

            // Create constraints

            // Allocate memory
            ind = GLPK.new_intArray(3);
            val = GLPK.new_doubleArray(3);

            // Create rows
            GLPK.glp_add_rows(lp, 2);

            // Set row details
            GLPK.glp_set_row_name(lp, 1, "c1");
            GLPK.glp_set_row_bnds(lp, 1, GLPK.GLP_DB, 0, 0.2);
            GLPK.intArray_setitem(ind, 1, 1);
            GLPK.intArray_setitem(ind, 2, 2);
            GLPK.doubleArray_setitem(val, 1, 1.0);
            GLPK.doubleArray_setitem(val, 2, -.5);
            GLPK.glp_set_mat_row(lp, 1, 2, ind, val);

            GLPK.glp_set_row_name(lp, 2, "c2");
            GLPK.glp_set_row_bnds(lp, 2, GLPK.GLP_UP, 0, 0.4);
            GLPK.intArray_setitem(ind, 1, 2);
            GLPK.intArray_setitem(ind, 2, 3);
            GLPK.doubleArray_setitem(val, 1, -1.0);
            GLPK.doubleArray_setitem(val, 2, 1.0);
            GLPK.glp_set_mat_row(lp, 2, 2, ind, val);

            // Free memory
            GLPK.delete_intArray(ind);
            GLPK.delete_doubleArray(val);

            // Define objective
            GLPK.glp_set_obj_name(lp, "z");
            GLPK.glp_set_obj_dir(lp, GLPK.GLP_MIN);
            GLPK.glp_set_obj_coef(lp, 0, 1.0);
            GLPK.glp_set_obj_coef(lp, 1, -.5);
            GLPK.glp_set_obj_coef(lp, 2, .5);
            GLPK.glp_set_obj_coef(lp, 3, -1);

            // Solve model
            parm = new glp_smcp();
            GLPK.glp_init_smcp(parm);
            ret = GLPK.glp_simplex(lp, parm);

            // Retrieve solution
            if (ret == 0)
            {
                write_lp_solution(lp);
            }
            else
            {
                Console.WriteLine("The problem could not be solved");
            }

            // Free memory
            GLPK.glp_delete_prob(lp);
        } catch (GlpkException) {
            Console.WriteLine("Error caught");
            ret = 1;
        }

        Environment.Exit(ret);
    }