Esempio n. 1
0
    /**
     * Main method.
     * @param args Command line arguments
     */
    static void Main(string[] args)
    {
        glp_prob            lp;
        glp_arc             arc;
        glp_cli_arc_data    adata;
        glp_cli_vertex_data vdata;

        try {
            glp_graph graph =
                GLPK.glp_create_graph(
                    GLPK.GLP_CLI_V_SIZE,
                    GLPK.GLP_CLI_A_SIZE);
            GLPK.glp_set_graph_name(graph, "MinimumCostFlow");

            GLPK.glp_add_vertices(graph, 9);

            GLPK.glp_set_vertex_name(graph, 1, "v1");
            GLPK.glp_set_vertex_name(graph, 2, "v2");
            GLPK.glp_set_vertex_name(graph, 3, "v3");
            GLPK.glp_set_vertex_name(graph, 4, "v4");
            GLPK.glp_set_vertex_name(graph, 5, "v5");
            GLPK.glp_set_vertex_name(graph, 6, "v6");
            GLPK.glp_set_vertex_name(graph, 7, "v7");
            GLPK.glp_set_vertex_name(graph, 8, "v8");
            GLPK.glp_set_vertex_name(graph, 9, "v9");

            vdata     = GLPK.glp_cli_vertex_data_get(graph, 1);
            vdata.rhs = 20;
            vdata     = GLPK.glp_cli_vertex_data_get(graph, 9);
            vdata.rhs = -20;

            arc       = GLPK.glp_add_arc(graph, 1, 2);
            adata     = GLPK.glp_cli_arc_get_data(arc);
            adata.low = 0; adata.cap = 14; adata.cost = 0;

            arc       = GLPK.glp_add_arc(graph, 1, 4);
            adata     = GLPK.glp_cli_arc_get_data(arc);
            adata.low = 0; adata.cap = 23; adata.cost = 0;

            arc       = GLPK.glp_add_arc(graph, 2, 4);
            adata     = GLPK.glp_cli_arc_get_data(arc);
            adata.low = 0; adata.cap = 9; adata.cost = 3;

            arc       = GLPK.glp_add_arc(graph, 2, 3);
            adata     = GLPK.glp_cli_arc_get_data(arc);
            adata.low = 0; adata.cap = 10; adata.cost = 2;

            arc       = GLPK.glp_add_arc(graph, 4, 5);
            adata     = GLPK.glp_cli_arc_get_data(arc);
            adata.low = 0; adata.cap = 26; adata.cost = 0;

            arc       = GLPK.glp_add_arc(graph, 5, 2);
            adata     = GLPK.glp_cli_arc_get_data(arc);
            adata.low = 0; adata.cap = 11; adata.cost = 1;

            arc       = GLPK.glp_add_arc(graph, 3, 8);
            adata     = GLPK.glp_cli_arc_get_data(arc);
            adata.low = 0; adata.cap = 18; adata.cost = 0;

            arc       = GLPK.glp_add_arc(graph, 3, 5);
            adata     = GLPK.glp_cli_arc_get_data(arc);
            adata.low = 2; adata.cap = 12; adata.cost = 1;

            arc       = GLPK.glp_add_arc(graph, 5, 6);
            adata     = GLPK.glp_cli_arc_get_data(arc);
            adata.low = 0; adata.cap = 25; adata.cost = 5;

            arc       = GLPK.glp_add_arc(graph, 5, 7);
            adata     = GLPK.glp_cli_arc_get_data(arc);
            adata.low = 0; adata.cap = 4; adata.cost = 7;

            arc       = GLPK.glp_add_arc(graph, 6, 7);
            adata     = GLPK.glp_cli_arc_get_data(arc);
            adata.low = 0; adata.cap = 7; adata.cost = 0;

            arc       = GLPK.glp_add_arc(graph, 6, 8);
            adata     = GLPK.glp_cli_arc_get_data(arc);
            adata.low = 4; adata.cap = 8; adata.cost = 0;

            arc       = GLPK.glp_add_arc(graph, 8, 9);
            adata     = GLPK.glp_cli_arc_get_data(arc);
            adata.low = 0; adata.cap = 20; adata.cost = 9;

            arc       = GLPK.glp_add_arc(graph, 7, 9);
            adata     = GLPK.glp_cli_arc_get_data(arc);
            adata.low = 0; adata.cap = 15; adata.cost = 3;

            GLPK.glp_write_mincost(graph,
                                   GLPK.GLP_CLI_V_RHS,
                                   GLPK.GLP_CLI_A_LOW,
                                   GLPK.GLP_CLI_A_CAP,
                                   GLPK.GLP_CLI_A_COST,
                                   "mincost.dimacs");
            lp = GLPK.glp_create_prob();
            GLPK.glp_mincost_lp(lp, graph,
                                GLPK.GLP_ON,             // use symbolic names
                                GLPK.GLP_CLI_V_RHS,
                                GLPK.GLP_CLI_A_LOW,
                                GLPK.GLP_CLI_A_CAP,
                                GLPK.GLP_CLI_A_COST);
            GLPK.glp_delete_graph(graph);
            GLPK.glp_write_lp(lp, null, "mincost.lp");
            GLPK.glp_delete_prob(lp);
        } catch (org.gnu.glpk.GlpkException ex) {
            Console.WriteLine(ex.Message);
            Environment.Exit(1);
        }
    }