help-glpk
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Help-glpk] Issues / bug with glp_write_mincost


From: Andrew Makhorin
Subject: Re: [Help-glpk] Issues / bug with glp_write_mincost
Date: Sun, 14 Feb 2010 03:30:25 +0300

> I am facing what seems to be like a strange issue with my use of
> glp_write_mincost, and have been breaking my head over it for over a
> day now.

> I create a custom graph (i.e. i don #39;t use glp_read_mincost but
> do glp_create_graph and use glp_add_vertices and glp_add_arc).

> I have initialized all the arc bounds to be [0,1] and costs to be 0.

> When I print this data using the below code, all the bounds and the
> costs are correct and as initialized.

>   glp_arc* arcTmp; 
>   glp_vertex* w;
>   //printf("Arc bounds: %d\n", arc(arcTmp)->a_uppBndCap);
>   
>   for (int i=1; i<=G->nv; i++)
>     {
>       printf("Supply of %d: %d\n", G->v[i]->i, vertex(G->v[i])->supply);
>      arcTmp = G->v[i]->out;
>       for (; arcTmp != NULL;  arcTmp = arcTmp->t_next)
> {
>   w = arcTmp->head;
>   printf("Arc Details: %d -> %d, Low: %d, Upp: %d, Cost:
> %f\n",G->v[i]->i, w->i, arc(arcTmp)->a_lowBndCap,
> arc(arcTmp)->a_uppBndCap, arc(arcTmp)->a_cost);
> }
>     }

> arc is the #define as given in the documentation: 
> #define arc(a) ((a_data *)((a)->data))
> However, when I do glp_write_mincost immediately after the above
> code-snippet:

> glp_write_mincost(G, offsetof(v_data, supply), offsetof(a_data,
> a_lowBndCap), offsetof(a_data, a_uppBndCap), offsetof(a_data, a_cost),
> fileName);

> the file `fileName #39; has all garbled up arc costs and node supplies.
> Example:
> c MinCostNetworkGraph
> p min 12 15
> n 1 9.88131291682493e-324 <- supply should have been 2 for the first node
> n 2 2.12199579096527e-314 <- supply should have been 0 for the second node
> .
> .
> .
> a 1 3 2.12199579096527e-314 4.94065645841247e-324 0 <-- lower bound
> is always 0 and upper bound is always 1
> a 1 2 2.12199579096527e-314 4.94065645841247e-324 0
> .
> .
> .
> c eof

> I tried writing down the LP by using glp_mincost_lp, but that gives
> the same screwed up values.
> Please advise.
> I can send the code files if required.

Make sure that all fields whose offsets are passed to
glp_write_mincost are declared as *double*. Looks like
arc(arcTmp)->a_lowBndCap and arc(arcTmp)->a_uppBndCap are of int type
that causes the error.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]