Esempio n. 1
0
    static void Main(string[] args)
    {
        glp_graph         g = null;
        int               ret;
        int               exitCode = 1;
        String            filename;
        SWIGTYPE_p_double sol;

        if (1 != args.Length)
        {
            Console.WriteLine("Usage: cli Relax4 model.min");
            Environment.Exit(1);
        }
        GLPK.glp_cli_set_numeric_locale("C");

        filename = args [0];

        sol = GLPK.new_doubleArray(1);
        try {
            g = GLPK.glp_create_graph(
                GLPK.GLP_CLI_V_SIZE,
                GLPK.GLP_CLI_A_SIZE);
            do
            {
                GLPK.glp_cli_set_numeric_locale("C");
                ret = GLPK.glp_read_mincost(
                    g,
                    GLPK.GLP_CLI_V_RHS,
                    GLPK.GLP_CLI_A_LOW,
                    GLPK.GLP_CLI_A_CAP,
                    GLPK.GLP_CLI_A_COST,
                    filename);
                if (ret != 0)
                {
                    break;
                }
                ret = GLPK.glp_mincost_relax4(
                    g,
                    GLPK.GLP_CLI_V_RHS,
                    GLPK.GLP_CLI_A_LOW,
                    GLPK.GLP_CLI_A_CAP,
                    GLPK.GLP_CLI_A_COST,
                    0,
                    sol,
                    GLPK.GLP_CLI_A_X,
                    GLPK.GLP_CLI_A_RC);
                Console.WriteLine(
                    "ret = {0}; sol = {1}", ret,
                    GLPK.doubleArray_getitem(sol, 0));
                if (ret != 0)
                {
                    break;
                }
                for (int i = 1; i < g.nv; i++)
                {
                    glp_vertex v = GLPK.glp_cli_vertex_get(g, i);
                    for (glp_arc a = v.out_; a != null;
                         a = a.t_next)
                    {
                        glp_vertex w = a.head;
                        Console.WriteLine(
                            "arc {0}->{1}: x = {2}; rc = {3}",
                            v.i, w.i,
                            GLPK.glp_cli_arc_get_data(a).x,
                            GLPK.glp_cli_arc_get_data(a).rc);
                    }
                }
                // signal success
                exitCode = 0;
            } while (false);
        } catch (GlpkException e) {
            // print error message
            Console.Error.WriteLine(e.Message);
            // signal failure
            GLPK.delete_doubleArray(sol);
            Environment.Exit(1);
        } finally {
            if (g != null)
            {
                GLPK.glp_delete_graph(g);
            }
        }
        GLPK.delete_doubleArray(sol);
        Environment.Exit(exitCode);
    }