548 changed files with 31363 additions and 9506 deletions
-
BINresources/3rdparty/glpk-4.57/doc/glpk.pdf
-
BINresources/3rdparty/glpk-4.57/doc/gmpl_es.pdf
-
BINresources/3rdparty/glpk-4.57/doc/graphs.pdf
-
BINresources/3rdparty/glpk-4.57/doc/notes/dfeas.pdf
-
BINresources/3rdparty/glpk-4.57/doc/notes/simplex1.pdf
-
BINresources/3rdparty/glpk-4.57/doc/notes/simplex2.pdf
-
10resources/3rdparty/glpk-4.57/examples/glpsol.c
-
178resources/3rdparty/glpk-4.57/src/Makefile.am
-
1235resources/3rdparty/glpk-4.57/src/glpapi11.c
-
330resources/3rdparty/glpk-4.57/src/glpapi16.c
-
1269resources/3rdparty/glpk-4.57/src/glpapi17.c
-
1693resources/3rdparty/glpk-4.57/src/glpdmx.c
-
190resources/3rdparty/glpk-4.57/src/glpgmp.h
-
259resources/3rdparty/glpk-4.57/src/glpsdf.c
-
63resources/3rdparty/glpk-4.57/src/glpsdf.h
-
222resources/3rdparty/glpk-4.57/src/simplex/spychuzc.c
-
204resources/3rdparty/glpk-4.57/w32/Makefile_VC
-
205resources/3rdparty/glpk-4.57/w32/Makefile_VC_DLL
-
204resources/3rdparty/glpk-4.57/w64/makefile_VC
-
205resources/3rdparty/glpk-4.57/w64/makefile_VC_DLL
-
0resources/3rdparty/glpk-4.65/AUTHORS
-
0resources/3rdparty/glpk-4.65/COPYING
-
522resources/3rdparty/glpk-4.65/ChangeLog
-
11resources/3rdparty/glpk-4.65/INSTALL
-
0resources/3rdparty/glpk-4.65/Makefile.am
-
1resources/3rdparty/glpk-4.65/Makefile.in
-
188resources/3rdparty/glpk-4.65/NEWS
-
20resources/3rdparty/glpk-4.65/README
-
26resources/3rdparty/glpk-4.65/THANKS
-
0resources/3rdparty/glpk-4.65/aclocal.m4
-
27resources/3rdparty/glpk-4.65/autogen.sh
-
0resources/3rdparty/glpk-4.65/config.guess
-
3resources/3rdparty/glpk-4.65/config.h.in
-
0resources/3rdparty/glpk-4.65/config.sub
-
91resources/3rdparty/glpk-4.65/configure
-
51resources/3rdparty/glpk-4.65/configure.ac
-
0resources/3rdparty/glpk-4.65/depcomp
-
0resources/3rdparty/glpk-4.65/doc/cnfsat.pdf
-
0resources/3rdparty/glpk-4.65/doc/cnfsat.tex
-
BINresources/3rdparty/glpk-4.65/doc/glpk.pdf
-
45resources/3rdparty/glpk-4.65/doc/glpk.tex
-
31resources/3rdparty/glpk-4.65/doc/glpk01.tex
-
252resources/3rdparty/glpk-4.65/doc/glpk02.tex
-
830resources/3rdparty/glpk-4.65/doc/glpk03.tex
-
37resources/3rdparty/glpk-4.65/doc/glpk04.tex
-
26resources/3rdparty/glpk-4.65/doc/glpk05.tex
-
2resources/3rdparty/glpk-4.65/doc/glpk06.tex
-
0resources/3rdparty/glpk-4.65/doc/glpk07.tex
-
68resources/3rdparty/glpk-4.65/doc/glpk08.tex
-
49resources/3rdparty/glpk-4.65/doc/glpk09.tex
-
5resources/3rdparty/glpk-4.65/doc/glpk10.tex
-
12resources/3rdparty/glpk-4.65/doc/glpk11.tex
-
51resources/3rdparty/glpk-4.65/doc/glpk12.tex
-
BINresources/3rdparty/glpk-4.65/doc/gmpl.pdf
-
22resources/3rdparty/glpk-4.65/doc/gmpl.tex
-
BINresources/3rdparty/glpk-4.65/doc/gmpl_es.pdf
-
22resources/3rdparty/glpk-4.65/doc/gmpl_es.tex
-
BINresources/3rdparty/glpk-4.65/doc/gmpl_pt-BR.pdf
-
7893resources/3rdparty/glpk-4.65/doc/gmpl_pt-BR.tex
-
BINresources/3rdparty/glpk-4.65/doc/graphs.pdf
-
266resources/3rdparty/glpk-4.65/doc/graphs.tex
-
0resources/3rdparty/glpk-4.65/doc/miplib2.txt
-
0resources/3rdparty/glpk-4.65/doc/miplib3.txt
-
0resources/3rdparty/glpk-4.65/doc/netlib.txt
-
0resources/3rdparty/glpk-4.65/doc/notes/gomory.pdf
-
0resources/3rdparty/glpk-4.65/doc/notes/keller.pdf
-
0resources/3rdparty/glpk-4.65/doc/notes/scf.pdf
-
BINresources/3rdparty/glpk-4.65/doc/notes/simplex1.pdf
-
BINresources/3rdparty/glpk-4.65/doc/notes/simplex2.pdf
-
283resources/3rdparty/glpk-4.65/doc/npp.txt
-
11resources/3rdparty/glpk-4.65/examples/INDEX
-
2resources/3rdparty/glpk-4.65/examples/Makefile.am
-
3resources/3rdparty/glpk-4.65/examples/Makefile.in
-
0resources/3rdparty/glpk-4.65/examples/alloy.mps
-
0resources/3rdparty/glpk-4.65/examples/assign.mod
-
0resources/3rdparty/glpk-4.65/examples/bpp.mod
-
0resources/3rdparty/glpk-4.65/examples/cal.mod
-
0resources/3rdparty/glpk-4.65/examples/cf12a.mod
-
0resources/3rdparty/glpk-4.65/examples/cf12b.mod
-
0resources/3rdparty/glpk-4.65/examples/cflsq.mod
-
0resources/3rdparty/glpk-4.65/examples/color.mod
-
0resources/3rdparty/glpk-4.65/examples/cplex/README
-
0resources/3rdparty/glpk-4.65/examples/cplex/concorde.txt
-
0resources/3rdparty/glpk-4.65/examples/cplex/cplex.c
-
0resources/3rdparty/glpk-4.65/examples/cplex/cplex.h
-
0resources/3rdparty/glpk-4.65/examples/cpp.mod
-
0resources/3rdparty/glpk-4.65/examples/crypto.mod
-
0resources/3rdparty/glpk-4.65/examples/csv/distances.csv
-
0resources/3rdparty/glpk-4.65/examples/csv/markets.csv
-
0resources/3rdparty/glpk-4.65/examples/csv/parameters.csv
-
0resources/3rdparty/glpk-4.65/examples/csv/plants.csv
-
0resources/3rdparty/glpk-4.65/examples/csv/transp_csv.mod
-
0resources/3rdparty/glpk-4.65/examples/dbf/ForestMgt_Model_I_GIS_dbf.mod
-
0resources/3rdparty/glpk-4.65/examples/dbf/Forest_Cost.dbf
-
0resources/3rdparty/glpk-4.65/examples/dbf/NetRev_Table.dbf
-
0resources/3rdparty/glpk-4.65/examples/dbf/README
-
0resources/3rdparty/glpk-4.65/examples/dbf/TCost_Table.dbf
-
0resources/3rdparty/glpk-4.65/examples/dbf/Yield_Table_Vol.dbf
-
0resources/3rdparty/glpk-4.65/examples/dbf/cultural_pres.dbf
-
0resources/3rdparty/glpk-4.65/examples/dbf/mgt_year.dbf
@ -1,10 +0,0 @@ |
|||
/* glpsol.c */ |
|||
|
|||
#include <glpk.h> |
|||
|
|||
int main(int argc, const char *argv[]) |
|||
{ /* stand-alone LP/MIP solver */ |
|||
return glp_main(argc, argv); |
|||
} |
|||
|
|||
/* eof */ |
@ -1,178 +0,0 @@ |
|||
## Process this file with automake to produce Makefile.in ##
|
|||
|
|||
include_HEADERS = glpk.h |
|||
|
|||
lib_LTLIBRARIES = libglpk.la |
|||
|
|||
libglpk_la_CPPFLAGS = \
|
|||
-I$(srcdir) \ |
|||
-I$(srcdir)/amd \ |
|||
-I$(srcdir)/bflib \ |
|||
-I$(srcdir)/cglib \ |
|||
-I$(srcdir)/colamd \ |
|||
-I$(srcdir)/env \ |
|||
-I$(srcdir)/minisat \ |
|||
-I$(srcdir)/misc \ |
|||
-I$(srcdir)/proxy \ |
|||
-I$(srcdir)/simplex \ |
|||
-I$(srcdir)/zlib |
|||
|
|||
libglpk_la_LDFLAGS = \
|
|||
-version-info 38:0:2 \ |
|||
-export-symbols-regex '^glp_*' |
|||
|
|||
libglpk_la_SOURCES = \
|
|||
avl.c \ |
|||
bfd.c \ |
|||
bfx.c \ |
|||
glpapi01.c \ |
|||
glpapi02.c \ |
|||
glpapi03.c \ |
|||
glpapi04.c \ |
|||
glpapi05.c \ |
|||
glpapi06.c \ |
|||
glpapi07.c \ |
|||
glpapi08.c \ |
|||
glpapi09.c \ |
|||
glpapi10.c \ |
|||
glpapi11.c \ |
|||
glpapi12.c \ |
|||
glpapi13.c \ |
|||
glpapi14.c \ |
|||
glpapi15.c \ |
|||
glpapi16.c \ |
|||
glpapi17.c \ |
|||
glpapi18.c \ |
|||
glpapi19.c \ |
|||
glpapi20.c \ |
|||
glpapi21.c \ |
|||
glpcpx.c \ |
|||
glpdmx.c \ |
|||
glpgmp.c \ |
|||
glphbm.c \ |
|||
glpini01.c \ |
|||
glpini02.c \ |
|||
glpios01.c \ |
|||
glpios02.c \ |
|||
glpios03.c \ |
|||
glpios04.c \ |
|||
glpios05.c \ |
|||
glpios06.c \ |
|||
glpios07.c \ |
|||
glpios08.c \ |
|||
glpios09.c \ |
|||
glpios10.c \ |
|||
glpios11.c \ |
|||
glpios12.c \ |
|||
glpipm.c \ |
|||
glpmat.c \ |
|||
glpmpl01.c \ |
|||
glpmpl02.c \ |
|||
glpmpl03.c \ |
|||
glpmpl04.c \ |
|||
glpmpl05.c \ |
|||
glpmpl06.c \ |
|||
glpmps.c \ |
|||
glpnet03.c \ |
|||
glpnet04.c \ |
|||
glpnet05.c \ |
|||
glpnpp01.c \ |
|||
glpnpp02.c \ |
|||
glpnpp03.c \ |
|||
glpnpp04.c \ |
|||
glpnpp05.c \ |
|||
glpnpp06.c \ |
|||
glprgr.c \ |
|||
glpscl.c \ |
|||
glpsdf.c \ |
|||
glpspm.c \ |
|||
glpsql.c \ |
|||
glpssx01.c \ |
|||
glpssx02.c \ |
|||
lux.c \ |
|||
amd/amd_1.c \ |
|||
amd/amd_2.c \ |
|||
amd/amd_aat.c \ |
|||
amd/amd_control.c \ |
|||
amd/amd_defaults.c \ |
|||
amd/amd_dump.c \ |
|||
amd/amd_info.c \ |
|||
amd/amd_order.c \ |
|||
amd/amd_post_tree.c \ |
|||
amd/amd_postorder.c \ |
|||
amd/amd_preprocess.c \ |
|||
amd/amd_valid.c \ |
|||
bflib/btf.c \ |
|||
bflib/btfint.c \ |
|||
bflib/fhv.c \ |
|||
bflib/fhvint.c \ |
|||
bflib/ifu.c \ |
|||
bflib/luf.c \ |
|||
bflib/lufint.c \ |
|||
bflib/scf.c \ |
|||
bflib/scfint.c \ |
|||
bflib/sgf.c \ |
|||
bflib/sva.c \ |
|||
cglib/cfg.c \ |
|||
cglib/cfg1.c \ |
|||
colamd/colamd.c \ |
|||
env/alloc.c \ |
|||
env/dlsup.c \ |
|||
env/env.c \ |
|||
env/error.c \ |
|||
env/stdout.c \ |
|||
env/stream.c \ |
|||
env/time.c \ |
|||
env/tls.c \ |
|||
minisat/minisat.c \ |
|||
misc/bignum.c \ |
|||
misc/dmp.c \ |
|||
misc/ffalg.c \ |
|||
misc/fp2rat.c \ |
|||
misc/gcd.c \ |
|||
misc/jd.c \ |
|||
misc/keller.c \ |
|||
misc/mc13d.c \ |
|||
misc/mc21a.c \ |
|||
misc/okalg.c \ |
|||
misc/qmd.c \ |
|||
misc/relax4.c \ |
|||
misc/rng.c \ |
|||
misc/rng1.c \ |
|||
misc/round2n.c \ |
|||
misc/str2int.c \ |
|||
misc/str2num.c \ |
|||
misc/strspx.c \ |
|||
misc/strtrim.c \ |
|||
misc/triang.c \ |
|||
misc/wclique.c \ |
|||
misc/wclique1.c \ |
|||
proxy/proxy.c \ |
|||
proxy/proxy1.c \ |
|||
simplex/spxat.c \ |
|||
simplex/spxchuzc.c \ |
|||
simplex/spxchuzr.c \ |
|||
simplex/spxlp.c \ |
|||
simplex/spxnt.c \ |
|||
simplex/spxprim.c \ |
|||
simplex/spxprob.c \ |
|||
simplex/spychuzc.c \ |
|||
simplex/spychuzr.c \ |
|||
simplex/spydual.c \ |
|||
zlib/adler32.c \ |
|||
zlib/compress.c \ |
|||
zlib/crc32.c \ |
|||
zlib/deflate.c \ |
|||
zlib/gzclose.c \ |
|||
zlib/gzlib.c \ |
|||
zlib/gzread.c \ |
|||
zlib/gzwrite.c \ |
|||
zlib/inffast.c \ |
|||
zlib/inflate.c \ |
|||
zlib/inftrees.c \ |
|||
zlib/trees.c \ |
|||
zlib/uncompr.c \ |
|||
zlib/zio.c \ |
|||
zlib/zutil.c |
|||
|
|||
## eof ##
|
1235
resources/3rdparty/glpk-4.57/src/glpapi11.c
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -1,330 +0,0 @@ |
|||
/* glpapi16.c (graph and network analysis routines) */ |
|||
|
|||
/*********************************************************************** |
|||
* This code is part of GLPK (GNU Linear Programming Kit). |
|||
* |
|||
* Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, |
|||
* 2009, 2010, 2011, 2013 Andrew Makhorin, Department for Applied |
|||
* Informatics, Moscow Aviation Institute, Moscow, Russia. All rights |
|||
* reserved. E-mail: <mao@gnu.org>. |
|||
* |
|||
* GLPK is free software: you can redistribute it and/or modify it |
|||
* under the terms of the GNU General Public License as published by |
|||
* the Free Software Foundation, either version 3 of the License, or |
|||
* (at your option) any later version. |
|||
* |
|||
* GLPK is distributed in the hope that it will be useful, but WITHOUT |
|||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY |
|||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public |
|||
* License for more details. |
|||
* |
|||
* You should have received a copy of the GNU General Public License |
|||
* along with GLPK. If not, see <http://www.gnu.org/licenses/>. |
|||
***********************************************************************/ |
|||
|
|||
#include "env.h" |
|||
#include "mc13d.h" |
|||
#include "prob.h" |
|||
|
|||
/*********************************************************************** |
|||
* NAME |
|||
* |
|||
* glp_weak_comp - find all weakly connected components of graph |
|||
* |
|||
* SYNOPSIS |
|||
* |
|||
* int glp_weak_comp(glp_graph *G, int v_num); |
|||
* |
|||
* DESCRIPTION |
|||
* |
|||
* The routine glp_weak_comp finds all weakly connected components of |
|||
* the specified graph. |
|||
* |
|||
* The parameter v_num specifies an offset of the field of type int |
|||
* in the vertex data block, to which the routine stores the number of |
|||
* a (weakly) connected component containing that vertex. If v_num < 0, |
|||
* no component numbers are stored. |
|||
* |
|||
* The components are numbered in arbitrary order from 1 to nc, where |
|||
* nc is the total number of components found, 0 <= nc <= |V|. |
|||
* |
|||
* RETURNS |
|||
* |
|||
* The routine returns nc, the total number of components found. */ |
|||
|
|||
int glp_weak_comp(glp_graph *G, int v_num) |
|||
{ glp_vertex *v; |
|||
glp_arc *a; |
|||
int f, i, j, nc, nv, pos1, pos2, *prev, *next, *list; |
|||
if (v_num >= 0 && v_num > G->v_size - (int)sizeof(int)) |
|||
xerror("glp_weak_comp: v_num = %d; invalid offset\n", v_num); |
|||
nv = G->nv; |
|||
if (nv == 0) |
|||
{ nc = 0; |
|||
goto done; |
|||
} |
|||
/* allocate working arrays */ |
|||
prev = xcalloc(1+nv, sizeof(int)); |
|||
next = xcalloc(1+nv, sizeof(int)); |
|||
list = xcalloc(1+nv, sizeof(int)); |
|||
/* if vertex i is unlabelled, prev[i] is the index of previous |
|||
unlabelled vertex, and next[i] is the index of next unlabelled |
|||
vertex; if vertex i is labelled, then prev[i] < 0, and next[i] |
|||
is the connected component number */ |
|||
/* initially all vertices are unlabelled */ |
|||
f = 1; |
|||
for (i = 1; i <= nv; i++) |
|||
prev[i] = i - 1, next[i] = i + 1; |
|||
next[nv] = 0; |
|||
/* main loop (until all vertices have been labelled) */ |
|||
nc = 0; |
|||
while (f != 0) |
|||
{ /* take an unlabelled vertex */ |
|||
i = f; |
|||
/* and remove it from the list of unlabelled vertices */ |
|||
f = next[i]; |
|||
if (f != 0) prev[f] = 0; |
|||
/* label the vertex; it begins a new component */ |
|||
prev[i] = -1, next[i] = ++nc; |
|||
/* breadth first search */ |
|||
list[1] = i, pos1 = pos2 = 1; |
|||
while (pos1 <= pos2) |
|||
{ /* dequeue vertex i */ |
|||
i = list[pos1++]; |
|||
/* consider all arcs incoming to vertex i */ |
|||
for (a = G->v[i]->in; a != NULL; a = a->h_next) |
|||
{ /* vertex j is adjacent to vertex i */ |
|||
j = a->tail->i; |
|||
if (prev[j] >= 0) |
|||
{ /* vertex j is unlabelled */ |
|||
/* remove it from the list of unlabelled vertices */ |
|||
if (prev[j] == 0) |
|||
f = next[j]; |
|||
else |
|||
next[prev[j]] = next[j]; |
|||
if (next[j] == 0) |
|||
; |
|||
else |
|||
prev[next[j]] = prev[j]; |
|||
/* label the vertex */ |
|||
prev[j] = -1, next[j] = nc; |
|||
/* and enqueue it for further consideration */ |
|||
list[++pos2] = j; |
|||
} |
|||
} |
|||
/* consider all arcs outgoing from vertex i */ |
|||
for (a = G->v[i]->out; a != NULL; a = a->t_next) |
|||
{ /* vertex j is adjacent to vertex i */ |
|||
j = a->head->i; |
|||
if (prev[j] >= 0) |
|||
{ /* vertex j is unlabelled */ |
|||
/* remove it from the list of unlabelled vertices */ |
|||
if (prev[j] == 0) |
|||
f = next[j]; |
|||
else |
|||
next[prev[j]] = next[j]; |
|||
if (next[j] == 0) |
|||
; |
|||
else |
|||
prev[next[j]] = prev[j]; |
|||
/* label the vertex */ |
|||
prev[j] = -1, next[j] = nc; |
|||
/* and enqueue it for further consideration */ |
|||
list[++pos2] = j; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
/* store component numbers */ |
|||
if (v_num >= 0) |
|||
{ for (i = 1; i <= nv; i++) |
|||
{ v = G->v[i]; |
|||
memcpy((char *)v->data + v_num, &next[i], sizeof(int)); |
|||
} |
|||
} |
|||
/* free working arrays */ |
|||
xfree(prev); |
|||
xfree(next); |
|||
xfree(list); |
|||
done: return nc; |
|||
} |
|||
|
|||
/*********************************************************************** |
|||
* NAME |
|||
* |
|||
* glp_strong_comp - find all strongly connected components of graph |
|||
* |
|||
* SYNOPSIS |
|||
* |
|||
* int glp_strong_comp(glp_graph *G, int v_num); |
|||
* |
|||
* DESCRIPTION |
|||
* |
|||
* The routine glp_strong_comp finds all strongly connected components |
|||
* of the specified graph. |
|||
* |
|||
* The parameter v_num specifies an offset of the field of type int |
|||
* in the vertex data block, to which the routine stores the number of |
|||
* a strongly connected component containing that vertex. If v_num < 0, |
|||
* no component numbers are stored. |
|||
* |
|||
* The components are numbered in arbitrary order from 1 to nc, where |
|||
* nc is the total number of components found, 0 <= nc <= |V|. However, |
|||
* the component numbering has the property that for every arc (i->j) |
|||
* in the graph the condition num(i) >= num(j) holds. |
|||
* |
|||
* RETURNS |
|||
* |
|||
* The routine returns nc, the total number of components found. */ |
|||
|
|||
int glp_strong_comp(glp_graph *G, int v_num) |
|||
{ glp_vertex *v; |
|||
glp_arc *a; |
|||
int i, k, last, n, na, nc, *icn, *ip, *lenr, *ior, *ib, *lowl, |
|||
*numb, *prev; |
|||
if (v_num >= 0 && v_num > G->v_size - (int)sizeof(int)) |
|||
xerror("glp_strong_comp: v_num = %d; invalid offset\n", |
|||
v_num); |
|||
n = G->nv; |
|||
if (n == 0) |
|||
{ nc = 0; |
|||
goto done; |
|||
} |
|||
na = G->na; |
|||
icn = xcalloc(1+na, sizeof(int)); |
|||
ip = xcalloc(1+n, sizeof(int)); |
|||
lenr = xcalloc(1+n, sizeof(int)); |
|||
ior = xcalloc(1+n, sizeof(int)); |
|||
ib = xcalloc(1+n, sizeof(int)); |
|||
lowl = xcalloc(1+n, sizeof(int)); |
|||
numb = xcalloc(1+n, sizeof(int)); |
|||
prev = xcalloc(1+n, sizeof(int)); |
|||
k = 1; |
|||
for (i = 1; i <= n; i++) |
|||
{ v = G->v[i]; |
|||
ip[i] = k; |
|||
for (a = v->out; a != NULL; a = a->t_next) |
|||
icn[k++] = a->head->i; |
|||
lenr[i] = k - ip[i]; |
|||
} |
|||
xassert(na == k-1); |
|||
nc = mc13d(n, icn, ip, lenr, ior, ib, lowl, numb, prev); |
|||
if (v_num >= 0) |
|||
{ xassert(ib[1] == 1); |
|||
for (k = 1; k <= nc; k++) |
|||
{ last = (k < nc ? ib[k+1] : n+1); |
|||
xassert(ib[k] < last); |
|||
for (i = ib[k]; i < last; i++) |
|||
{ v = G->v[ior[i]]; |
|||
memcpy((char *)v->data + v_num, &k, sizeof(int)); |
|||
} |
|||
} |
|||
} |
|||
xfree(icn); |
|||
xfree(ip); |
|||
xfree(lenr); |
|||
xfree(ior); |
|||
xfree(ib); |
|||
xfree(lowl); |
|||
xfree(numb); |
|||
xfree(prev); |
|||
done: return nc; |
|||
} |
|||
|
|||
/*********************************************************************** |
|||
* NAME |
|||
* |
|||
* glp_top_sort - topological sorting of acyclic digraph |
|||
* |
|||
* SYNOPSIS |
|||
* |
|||
* int glp_top_sort(glp_graph *G, int v_num); |
|||
* |
|||
* DESCRIPTION |
|||
* |
|||
* The routine glp_top_sort performs topological sorting of vertices of |
|||
* the specified acyclic digraph. |
|||
* |
|||
* The parameter v_num specifies an offset of the field of type int in |
|||
* the vertex data block, to which the routine stores the vertex number |
|||
* assigned. If v_num < 0, vertex numbers are not stored. |
|||
* |
|||
* The vertices are numbered from 1 to n, where n is the total number |
|||
* of vertices in the graph. The vertex numbering has the property that |
|||
* for every arc (i->j) in the graph the condition num(i) < num(j) |
|||
* holds. Special case num(i) = 0 means that vertex i is not assigned a |
|||
* number, because the graph is *not* acyclic. |
|||
* |
|||
* RETURNS |
|||
* |
|||
* If the graph is acyclic and therefore all the vertices have been |
|||
* assigned numbers, the routine glp_top_sort returns zero. Otherwise, |
|||
* if the graph is not acyclic, the routine returns the number of |
|||
* vertices which have not been numbered, i.e. for which num(i) = 0. */ |
|||
|
|||
static int top_sort(glp_graph *G, int num[]) |
|||
{ glp_arc *a; |
|||
int i, j, cnt, top, *stack, *indeg; |
|||
/* allocate working arrays */ |
|||
indeg = xcalloc(1+G->nv, sizeof(int)); |
|||
stack = xcalloc(1+G->nv, sizeof(int)); |
|||
/* determine initial indegree of each vertex; push into the stack |
|||
the vertices having zero indegree */ |
|||
top = 0; |
|||
for (i = 1; i <= G->nv; i++) |
|||
{ num[i] = indeg[i] = 0; |
|||
for (a = G->v[i]->in; a != NULL; a = a->h_next) |
|||
indeg[i]++; |
|||
if (indeg[i] == 0) |
|||
stack[++top] = i; |
|||
} |
|||
/* assign numbers to vertices in the sorted order */ |
|||
cnt = 0; |
|||
while (top > 0) |
|||
{ /* pull vertex i from the stack */ |
|||
i = stack[top--]; |
|||
/* it has zero indegree in the current graph */ |
|||
xassert(indeg[i] == 0); |
|||
/* so assign it a next number */ |
|||
xassert(num[i] == 0); |
|||
num[i] = ++cnt; |
|||
/* remove vertex i from the current graph, update indegree of |
|||
its adjacent vertices, and push into the stack new vertices |
|||
whose indegree becomes zero */ |
|||
for (a = G->v[i]->out; a != NULL; a = a->t_next) |
|||
{ j = a->head->i; |
|||
/* there exists arc (i->j) in the graph */ |
|||
xassert(indeg[j] > 0); |
|||
indeg[j]--; |
|||
if (indeg[j] == 0) |
|||
stack[++top] = j; |
|||
} |
|||
} |
|||
/* free working arrays */ |
|||
xfree(indeg); |
|||
xfree(stack); |
|||
return G->nv - cnt; |
|||
} |
|||
|
|||
int glp_top_sort(glp_graph *G, int v_num) |
|||
{ glp_vertex *v; |
|||
int i, cnt, *num; |
|||
if (v_num >= 0 && v_num > G->v_size - (int)sizeof(int)) |
|||
xerror("glp_top_sort: v_num = %d; invalid offset\n", v_num); |
|||
if (G->nv == 0) |
|||
{ cnt = 0; |
|||
goto done; |
|||
} |
|||
num = xcalloc(1+G->nv, sizeof(int)); |
|||
cnt = top_sort(G, num); |
|||
if (v_num >= 0) |
|||
{ for (i = 1; i <= G->nv; i++) |
|||
{ v = G->v[i]; |
|||
memcpy((char *)v->data + v_num, &num[i], sizeof(int)); |
|||
} |
|||
} |
|||
xfree(num); |
|||
done: return cnt; |
|||
} |
|||
|
|||
/* eof */ |
1269
resources/3rdparty/glpk-4.57/src/glpapi17.c
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1693
resources/3rdparty/glpk-4.57/src/glpdmx.c
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -1,190 +0,0 @@ |
|||
/* glpgmp.h (bignum arithmetic) */ |
|||
|
|||
/*********************************************************************** |
|||
* This code is part of GLPK (GNU Linear Programming Kit). |
|||
* |
|||
* Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, |
|||
* 2009, 2010, 2011, 2013 Andrew Makhorin, Department for Applied |
|||
* Informatics, Moscow Aviation Institute, Moscow, Russia. All rights |
|||
* reserved. E-mail: <mao@gnu.org>. |
|||
* |
|||
* GLPK is free software: you can redistribute it and/or modify it |
|||
* under the terms of the GNU General Public License as published by |
|||
* the Free Software Foundation, either version 3 of the License, or |
|||
* (at your option) any later version. |
|||
* |
|||
* GLPK is distributed in the hope that it will be useful, but WITHOUT |
|||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY |
|||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public |
|||
* License for more details. |
|||
* |
|||
* You should have received a copy of the GNU General Public License |
|||
* along with GLPK. If not, see <http://www.gnu.org/licenses/>. |
|||
***********************************************************************/ |
|||
|
|||
#ifndef GLPGMP_H |
|||
#define GLPGMP_H |
|||
|
|||
#ifdef HAVE_CONFIG_H |
|||
#include <config.h> |
|||
#endif |
|||
|
|||
#ifdef HAVE_GMP /* use GNU MP bignum library */ |
|||
|
|||
#include <gmp.h> |
|||
|
|||
#define gmp_pool_count _glp_gmp_pool_count |
|||
#define gmp_free_mem _glp_gmp_free_mem |
|||
|
|||
int gmp_pool_count(void); |
|||
void gmp_free_mem(void); |
|||
|
|||
#else /* use GLPK bignum module */ |
|||
|
|||
/*---------------------------------------------------------------------- |
|||
// INTEGER NUMBERS |
|||
// |
|||
// Depending on its magnitude an integer number of arbitrary precision |
|||
// is represented either in short format or in long format. |
|||
// |
|||
// Short format corresponds to the int type and allows representing |
|||
// integer numbers in the range [-(2^31-1), +(2^31-1)]. Note that for |
|||
// the most negative number of int type the short format is not used. |
|||
// |
|||
// In long format integer numbers are represented using the positional |
|||
// system with the base (radix) 2^16 = 65536: |
|||
// |
|||
// x = (-1)^s sum{j in 0..n-1} d[j] * 65536^j, |
|||
// |
|||
// where x is the integer to be represented, s is its sign (+1 or -1), |
|||
// d[j] are its digits (0 <= d[j] <= 65535). |
|||
// |
|||
// RATIONAL NUMBERS |
|||
// |
|||
// A rational number is represented as an irreducible fraction: |
|||
// |
|||
// p / q, |
|||
// |
|||
// where p (numerator) and q (denominator) are integer numbers (q > 0) |
|||
// having no common divisors. */ |
|||
|
|||
struct mpz |
|||
{ /* integer number */ |
|||
int val; |
|||
/* if ptr is a null pointer, the number is in short format, and |
|||
val is its value; otherwise, the number is in long format, and |
|||
val is its sign (+1 or -1) */ |
|||
struct mpz_seg *ptr; |
|||
/* pointer to the linked list of the number segments ordered in |
|||
ascending of powers of the base */ |
|||
}; |
|||
|
|||
struct mpz_seg |
|||
{ /* integer number segment */ |
|||
unsigned short d[6]; |
|||
/* six digits of the number ordered in ascending of powers of the |
|||
base */ |
|||
struct mpz_seg *next; |
|||
/* pointer to the next number segment */ |
|||
}; |
|||
|
|||
struct mpq |
|||
{ /* rational number (p / q) */ |
|||
struct mpz p; |
|||
/* numerator */ |
|||
struct mpz q; |
|||
/* denominator */ |
|||
}; |
|||
|
|||
typedef struct mpz *mpz_t; |
|||
typedef struct mpq *mpq_t; |
|||
|
|||
#define gmp_get_atom _glp_gmp_get_atom |
|||
#define gmp_free_atom _glp_gmp_free_atom |
|||
#define gmp_pool_count _glp_gmp_pool_count |
|||
#define gmp_get_work _glp_gmp_get_work |
|||
#define gmp_free_mem _glp_gmp_free_mem |
|||
|
|||
#define _mpz_init _glp_mpz_init |
|||
#define mpz_clear _glp_mpz_clear |
|||
#define mpz_set _glp_mpz_set |
|||
#define mpz_set_si _glp_mpz_set_si |
|||
#define mpz_get_d _glp_mpz_get_d |
|||
#define mpz_get_d_2exp _glp_mpz_get_d_2exp |
|||
#define mpz_swap _glp_mpz_swap |
|||
#define mpz_add _glp_mpz_add |
|||
#define mpz_sub _glp_mpz_sub |
|||
#define mpz_mul _glp_mpz_mul |
|||
#define mpz_neg _glp_mpz_neg |
|||
#define mpz_abs _glp_mpz_abs |
|||
#define mpz_div _glp_mpz_div |
|||
#define mpz_gcd _glp_mpz_gcd |
|||
#define mpz_cmp _glp_mpz_cmp |
|||
#define mpz_sgn _glp_mpz_sgn |
|||
#define mpz_out_str _glp_mpz_out_str |
|||
|
|||
#define _mpq_init _glp_mpq_init |
|||
#define mpq_clear _glp_mpq_clear |
|||
#define mpq_canonicalize _glp_mpq_canonicalize |
|||
#define mpq_set _glp_mpq_set |
|||
#define mpq_set_si _glp_mpq_set_si |
|||
#define mpq_get_d _glp_mpq_get_d |
|||
#define mpq_set_d _glp_mpq_set_d |
|||
#define mpq_add _glp_mpq_add |
|||
#define mpq_sub _glp_mpq_sub |
|||
#define mpq_mul _glp_mpq_mul |
|||
#define mpq_div _glp_mpq_div |
|||
#define mpq_neg _glp_mpq_neg |
|||
#define mpq_abs _glp_mpq_abs |
|||
#define mpq_cmp _glp_mpq_cmp |
|||
#define mpq_sgn _glp_mpq_sgn |
|||
#define mpq_out_str _glp_mpq_out_str |
|||
|
|||
void *gmp_get_atom(int size); |
|||
void gmp_free_atom(void *ptr, int size); |
|||
int gmp_pool_count(void); |
|||
unsigned short *gmp_get_work(int size); |
|||
void gmp_free_mem(void); |
|||
|
|||
mpz_t _mpz_init(void); |
|||
#define mpz_init(x) (void)((x) = _mpz_init()) |
|||
void mpz_clear(mpz_t x); |
|||
void mpz_set(mpz_t z, mpz_t x); |
|||
void mpz_set_si(mpz_t x, int val); |
|||
double mpz_get_d(mpz_t x); |
|||
double mpz_get_d_2exp(int *exp, mpz_t x); |
|||
void mpz_swap(mpz_t x, mpz_t y); |
|||
void mpz_add(mpz_t, mpz_t, mpz_t); |
|||
void mpz_sub(mpz_t, mpz_t, mpz_t); |
|||
void mpz_mul(mpz_t, mpz_t, mpz_t); |
|||
void mpz_neg(mpz_t z, mpz_t x); |
|||
void mpz_abs(mpz_t z, mpz_t x); |
|||
void mpz_div(mpz_t q, mpz_t r, mpz_t x, mpz_t y); |
|||
void mpz_gcd(mpz_t z, mpz_t x, mpz_t y); |
|||
int mpz_cmp(mpz_t x, mpz_t y); |
|||
int mpz_sgn(mpz_t x); |
|||
int mpz_out_str(void *fp, int base, mpz_t x); |
|||
|
|||
mpq_t _mpq_init(void); |
|||
#define mpq_init(x) (void)((x) = _mpq_init()) |
|||
void mpq_clear(mpq_t x); |
|||
void mpq_canonicalize(mpq_t x); |
|||
void mpq_set(mpq_t z, mpq_t x); |
|||
void mpq_set_si(mpq_t x, int p, unsigned int q); |
|||
double mpq_get_d(mpq_t x); |
|||
void mpq_set_d(mpq_t x, double val); |
|||
void mpq_add(mpq_t z, mpq_t x, mpq_t y); |
|||
void mpq_sub(mpq_t z, mpq_t x, mpq_t y); |
|||
void mpq_mul(mpq_t z, mpq_t x, mpq_t y); |
|||
void mpq_div(mpq_t z, mpq_t x, mpq_t y); |
|||
void mpq_neg(mpq_t z, mpq_t x); |
|||
void mpq_abs(mpq_t z, mpq_t x); |
|||
int mpq_cmp(mpq_t x, mpq_t y); |
|||
int mpq_sgn(mpq_t x); |
|||
int mpq_out_str(void *fp, int base, mpq_t x); |
|||
|
|||
#endif |
|||
|
|||
#endif |
|||
|
|||
/* eof */ |
@ -1,259 +0,0 @@ |
|||
/* glpsdf.c (plain data file reading routines) */ |
|||
|
|||
/*********************************************************************** |
|||
* This code is part of GLPK (GNU Linear Programming Kit). |
|||
* |
|||
* Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, |
|||
* 2009, 2010, 2011, 2013 Andrew Makhorin, Department for Applied |
|||
* Informatics, Moscow Aviation Institute, Moscow, Russia. All rights |
|||
* reserved. E-mail: <mao@gnu.org>. |
|||
* |
|||
* GLPK is free software: you can redistribute it and/or modify it |
|||
* under the terms of the GNU General Public License as published by |
|||
* the Free Software Foundation, either version 3 of the License, or |
|||
* (at your option) any later version. |
|||
* |
|||
* GLPK is distributed in the hope that it will be useful, but WITHOUT |
|||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY |
|||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public |
|||
* License for more details. |
|||
* |
|||
* You should have received a copy of the GNU General Public License |
|||
* along with GLPK. If not, see <http://www.gnu.org/licenses/>. |
|||
***********************************************************************/ |
|||
|
|||
#include "env.h" |
|||
#include "glpsdf.h" |
|||
#include "misc.h" |
|||
|
|||
struct glp_data |
|||
{ /* plain data file */ |
|||
char *fname; |
|||
/* name of data file */ |
|||
glp_file *fp; |
|||
/* stream assigned to data file */ |
|||
void *jump; /* jmp_buf jump; */ |
|||
/* label for go to in case of error */ |
|||
int count; |
|||
/* line count */ |
|||
int c; |
|||
/* current character of EOF */ |
|||
char item[255+1]; |
|||
/* current data item */ |
|||
}; |
|||
|
|||
static void next_char(glp_data *data); |
|||
|
|||
glp_data *glp_sdf_open_file(const char *fname) |
|||
{ /* open plain data file */ |
|||
glp_data *data = NULL; |
|||
glp_file *fp; |
|||
jmp_buf jump; |
|||
fp = glp_open(fname, "r"); |
|||
if (fp == NULL) |
|||
{ xprintf("Unable to open '%s' - %s\n", fname, get_err_msg()); |
|||
goto done; |
|||
} |
|||
data = xmalloc(sizeof(glp_data)); |
|||
data->fname = xmalloc(strlen(fname)+1); |
|||
strcpy(data->fname, fname); |
|||
data->fp = fp; |
|||
data->jump = NULL; |
|||
data->count = 0; |
|||
data->c = '\n'; |
|||
data->item[0] = '\0'; |
|||
/* read the very first character */ |
|||
if (setjmp(jump)) |
|||
{ glp_sdf_close_file(data); |
|||
data = NULL; |
|||
goto done; |
|||
} |
|||
data->jump = jump; |
|||
next_char(data); |
|||
data->jump = NULL; |
|||
done: return data; |
|||
} |
|||
|
|||
void glp_sdf_set_jump(glp_data *data, void *jump) |
|||
{ /* set up error handling */ |
|||
data->jump = jump; |
|||
return; |
|||
} |
|||
|
|||
void glp_sdf_error(glp_data *data, const char *fmt, ...) |
|||
{ /* print error message */ |
|||
va_list arg; |
|||
xprintf("%s:%d: ", data->fname, data->count); |
|||
va_start(arg, fmt); |
|||
xvprintf(fmt, arg); |
|||
va_end(arg); |
|||
if (data->jump == NULL) |
|||
xerror(""); |
|||
else |
|||
longjmp(data->jump, 1); |
|||
/* no return */ |
|||
} |
|||
|
|||
void glp_sdf_warning(glp_data *data, const char *fmt, ...) |
|||
{ /* print warning message */ |
|||
va_list arg; |
|||
xprintf("%s:%d: warning: ", data->fname, data->count); |
|||
va_start(arg, fmt); |
|||
xvprintf(fmt, arg); |
|||
va_end(arg); |
|||
return; |
|||
} |
|||
|
|||
static void next_char(glp_data *data) |
|||
{ /* read next character */ |
|||
int c; |
|||
if (data->c == EOF) |
|||
glp_sdf_error(data, "unexpected end of file\n"); |
|||
else if (data->c == '\n') |
|||
data->count++; |
|||
c = glp_getc(data->fp); |
|||
if (c < 0) |
|||
{ if (glp_ioerr(data->fp)) |
|||
glp_sdf_error(data, "read error - %s\n", get_err_msg()); |
|||
else if (data->c == '\n') |
|||
c = EOF; |
|||
else |
|||
{ glp_sdf_warning(data, "missing final end of line\n"); |
|||
c = '\n'; |
|||
} |
|||
} |
|||
else if (c == '\n') |
|||
; |
|||
else if (isspace(c)) |
|||
c = ' '; |
|||
else if (iscntrl(c)) |
|||
glp_sdf_error(data, "invalid control character 0x%02X\n", c); |
|||
data->c = c; |
|||
return; |
|||
} |
|||
|
|||
static void skip_pad(glp_data *data) |
|||
{ /* skip uninteresting characters and comments */ |
|||
loop: while (data->c == ' ' || data->c == '\n') |
|||
next_char(data); |
|||
if (data->c == '/') |
|||
{ next_char(data); |
|||
if (data->c != '*') |
|||
glp_sdf_error(data, "invalid use of slash\n"); |
|||
next_char(data); |
|||
for (;;) |
|||
{ if (data->c == '*') |
|||
{ next_char(data); |
|||
if (data->c == '/') |
|||
{ next_char(data); |
|||
break; |
|||
} |
|||
} |
|||
next_char(data); |
|||
} |
|||
goto loop; |
|||
} |
|||
return; |
|||
} |
|||
|
|||
static void next_item(glp_data *data) |
|||
{ /* read next item */ |
|||
int len; |
|||
skip_pad(data); |
|||
len = 0; |
|||
while (!(data->c == ' ' || data->c == '\n')) |
|||
{ data->item[len++] = (char)data->c; |
|||
if (len == sizeof(data->item)) |
|||
glp_sdf_error(data, "data item '%.31s...' too long\n", |
|||
data->item); |
|||
next_char(data); |
|||
} |
|||
data->item[len] = '\0'; |
|||
return; |
|||
} |
|||
|
|||
int glp_sdf_read_int(glp_data *data) |
|||
{ /* read integer number */ |
|||
int x; |
|||
next_item(data); |
|||
switch (str2int(data->item, &x)) |
|||
{ case 0: |
|||
break; |
|||
case 1: |
|||
glp_sdf_error(data, "integer '%s' out of range\n", |
|||
data->item); |
|||
case 2: |
|||
glp_sdf_error(data, "cannot convert '%s' to integer\n", |
|||
data->item); |
|||
default: |
|||
xassert(data != data); |
|||
} |
|||
return x; |
|||
} |
|||
|
|||
double glp_sdf_read_num(glp_data *data) |
|||
{ /* read floating-point number */ |
|||
double x; |
|||
next_item(data); |
|||
switch (str2num(data->item, &x)) |
|||
{ case 0: |
|||
break; |
|||
case 1: |
|||
glp_sdf_error(data, "number '%s' out of range\n", |
|||
data->item); |
|||
case 2: |
|||
glp_sdf_error(data, "cannot convert '%s' to number\n", |
|||
data->item); |
|||
default: |
|||
xassert(data != data); |
|||
} |
|||
return x; |
|||
} |
|||
|
|||
const char *glp_sdf_read_item(glp_data *data) |
|||
{ /* read data item */ |
|||
next_item(data); |
|||
return data->item; |
|||
} |
|||
|
|||
const char *glp_sdf_read_text(glp_data *data) |
|||
{ /* read text until end of line */ |
|||
int c, len = 0; |
|||
for (;;) |
|||
{ c = data->c; |
|||
next_char(data); |
|||
if (c == ' ') |
|||
{ /* ignore initial spaces */ |
|||
if (len == 0) continue; |
|||
/* and multiple ones */ |
|||
if (data->item[len-1] == ' ') continue; |
|||
} |
|||
else if (c == '\n') |
|||
{ /* remove trailing space */ |
|||
if (len > 0 && data->item[len-1] == ' ') len--; |
|||
/* and stop reading */ |
|||
break; |
|||
} |
|||
/* add current character to the buffer */ |
|||
data->item[len++] = (char)c; |
|||
if (len == sizeof(data->item)) |
|||
glp_sdf_error(data, "line too long\n", data->item); |
|||
} |
|||
data->item[len] = '\0'; |
|||
return data->item; |
|||
} |
|||
|
|||
int glp_sdf_line(glp_data *data) |
|||
{ /* determine current line number */ |
|||
return data->count; |
|||
} |
|||
|
|||
void glp_sdf_close_file(glp_data *data) |
|||
{ /* close plain data file */ |
|||
glp_close(data->fp); |
|||
xfree(data->fname); |
|||
xfree(data); |
|||
return; |
|||
} |
|||
|
|||
/* eof */ |
@ -1,63 +0,0 @@ |
|||
/* glpsdf.h */ |
|||
|
|||
/*********************************************************************** |
|||
* This code is part of GLPK (GNU Linear Programming Kit). |
|||
* |
|||
* Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, |
|||
* 2009, 2010, 2011, 2013 Andrew Makhorin, Department for Applied |
|||
* Informatics, Moscow Aviation Institute, Moscow, Russia. All rights |
|||
* reserved. E-mail: <mao@gnu.org>. |
|||
* |
|||
* GLPK is free software: you can redistribute it and/or modify it |
|||
* under the terms of the GNU General Public License as published by |
|||
* the Free Software Foundation, either version 3 of the License, or |
|||
* (at your option) any later version. |
|||
* |
|||
* GLPK is distributed in the hope that it will be useful, but WITHOUT |
|||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY |
|||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public |
|||
* License for more details. |
|||
* |
|||
* You should have received a copy of the GNU General Public License |
|||
* along with GLPK. If not, see <http://www.gnu.org/licenses/>. |
|||
***********************************************************************/ |
|||
|
|||
#ifndef GLPSDF_H |
|||
#define GLPSDF_H |
|||
|
|||
typedef struct glp_data glp_data; |
|||
/* plain data file */ |
|||
|
|||
glp_data *glp_sdf_open_file(const char *fname); |
|||
/* open plain data file */ |
|||
|
|||
void glp_sdf_set_jump(glp_data *data, void *jump); |
|||
/* set up error handling */ |
|||
|
|||
void glp_sdf_error(glp_data *data, const char *fmt, ...); |
|||
/* print error message */ |
|||
|
|||
void glp_sdf_warning(glp_data *data, const char *fmt, ...); |
|||
/* print warning message */ |
|||
|
|||
int glp_sdf_read_int(glp_data *data); |
|||
/* read integer number */ |
|||
|
|||
double glp_sdf_read_num(glp_data *data); |
|||
/* read floating-point number */ |
|||
|
|||
const char *glp_sdf_read_item(glp_data *data); |
|||
/* read data item */ |
|||
|
|||
const char *glp_sdf_read_text(glp_data *data); |
|||
/* read text until end of line */ |
|||
|
|||
int glp_sdf_line(glp_data *data); |
|||
/* determine current line number */ |
|||
|
|||
void glp_sdf_close_file(glp_data *data); |
|||
/* close plain data file */ |
|||
|
|||
#endif |
|||
|
|||
/* eof */ |
@ -1,222 +0,0 @@ |
|||
/* spychuzc.c */ |
|||
|
|||
/*********************************************************************** |
|||
* This code is part of GLPK (GNU Linear Programming Kit). |
|||
* |
|||
* Copyright (C) 2015 Andrew Makhorin, Department for Applied |
|||
* Informatics, Moscow Aviation Institute, Moscow, Russia. All rights |
|||
* reserved. E-mail: <mao@gnu.org>. |
|||
* |
|||
* GLPK is free software: you can redistribute it and/or modify it |
|||
* under the terms of the GNU General Public License as published by |
|||
* the Free Software Foundation, either version 3 of the License, or |
|||
* (at your option) any later version. |
|||
* |
|||
* GLPK is distributed in the hope that it will be useful, but WITHOUT |
|||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY |
|||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public |
|||
* License for more details. |
|||
* |
|||
* You should have received a copy of the GNU General Public License |
|||
* along with GLPK. If not, see <http://www.gnu.org/licenses/>. |
|||
***********************************************************************/ |
|||
|
|||
#include "env.h" |
|||
#include "spychuzc.h" |
|||
|
|||
/*********************************************************************** |
|||
* spy_chuzc_std - choose non-basic variable (dual textbook ratio test) |
|||
* |
|||
* This routine implements an improved dual textbook ratio test to |
|||
* choose non-basic variable xN[q]. |
|||
* |
|||
* Current reduced costs of non-basic variables should be placed in the |
|||
* array locations d[1], ..., d[n-m]. Note that d[j] is a value of dual |
|||
* basic variable lambdaN[j] in the current basis. |
|||
* |
|||
* The parameter s specifies the sign of bound violation for basic |
|||
* variable xB[p] chosen: s = +1.0 means that xB[p] violates its lower |
|||
* bound, so dual non-basic variable lambdaB[p] = lambda^+B[p] |
|||
* increases, and s = -1.0 means that xB[p] violates its upper bound, |
|||
* so dual non-basic variable lambdaB[p] = lambda^-B[p] decreases. |
|||
* (Thus, the dual ray parameter theta = s * lambdaB[p] >= 0.) |
|||
* |
|||
* Elements of p-th simplex table row t[p] = (t[p,j]) corresponding |
|||
* to basic variable xB[p] should be placed in the array locations |
|||
* trow[1], ..., trow[n-m]. |
|||
* |
|||
* The parameter tol_piv specifies a tolerance for elements of the |
|||
* simplex table row t[p]. If |t[p,j]| < tol_piv, dual basic variable |
|||
* lambdaN[j] is skipped, i.e. it is assumed that it does not depend on |
|||
* the dual ray parameter theta. |
|||
* |
|||
* The parameters tol and tol1 specify tolerances used to increase the |
|||
* choice freedom by simulating an artificial degeneracy as follows. |
|||
* If lambdaN[j] = lambda^+N[j] >= 0 and d[j] <= +delta[j], or if |
|||
* lambdaN[j] = lambda^-N[j] <= 0 and d[j] >= -delta[j], where |
|||
* delta[j] = tol + tol1 * |cN[j]|, cN[j] is objective coefficient at |
|||
* xN[j], then it is assumed that reduced cost d[j] is equal to zero. |
|||
* |
|||
* The routine determines the index 1 <= q <= n-m of non-basic variable |
|||
* xN[q], for which corresponding dual basic variable lambda^+N[j] or |
|||
* lambda^-N[j] reaches its zero bound first on increasing the dual ray |
|||
* parameter theta, and returns p on exit. And if theta may increase |
|||
* unlimitedly, the routine returns zero. */ |
|||
|
|||
int spy_chuzc_std(SPXLP *lp, const double d[/*1+n-m*/], |
|||
double s, const double trow[/*1+n-m*/], double tol_piv, |
|||
double tol, double tol1) |
|||
{ int m = lp->m; |
|||
int n = lp->n; |
|||
double *c = lp->c; |
|||
double *l = lp->l; |
|||
double *u = lp->u; |
|||
int *head = lp->head; |
|||
char *flag = lp->flag; |
|||
int j, k, q; |
|||
double alfa, biga, delta, teta, teta_min; |
|||
xassert(s == +1.0 || s == -1.0); |
|||
/* nothing is chosen so far */ |
|||
q = 0, teta_min = DBL_MAX, biga = 0.0; |
|||
/* walk thru the list of non-basic variables */ |
|||
for (j = 1; j <= n-m; j++) |
|||
{ k = head[m+j]; /* x[k] = xN[j] */ |
|||
/* if xN[j] is fixed variable, skip it */ |
|||
if (l[k] == u[k]) |
|||
continue; |
|||
alfa = s * trow[j]; |
|||
if (alfa >= +tol_piv && !flag[j]) |
|||
{ /* xN[j] is either free or has its lower bound active, so |
|||
* lambdaN[j] = d[j] >= 0 decreases down to zero */ |
|||
delta = tol + tol1 * (c[k] >= 0.0 ? +c[k] : -c[k]); |
|||
/* determine theta on which lambdaN[j] reaches zero */ |
|||
teta = (d[j] < +delta ? 0.0 : d[j] / alfa); |
|||
} |
|||
else if (alfa <= -tol_piv && (l[k] == -DBL_MAX || flag[j])) |
|||
{ /* xN[j] is either free or has its upper bound active, so |
|||
* lambdaN[j] = d[j] <= 0 increases up to zero */ |
|||
delta = tol + tol1 * (c[k] >= 0.0 ? +c[k] : -c[k]); |
|||
/* determine theta on which lambdaN[j] reaches zero */ |
|||
teta = (d[j] > -delta ? 0.0 : d[j] / alfa); |
|||
} |
|||
else |
|||
{ /* lambdaN[j] cannot reach zero on increasing theta */ |
|||
continue; |
|||
} |
|||
/* choose non-basic variable xN[q] by corresponding dual basic |
|||
* variable lambdaN[q] for which theta is minimal */ |
|||
xassert(teta >= 0.0); |
|||
alfa = (alfa >= 0.0 ? +alfa : -alfa); |
|||
if (teta_min > teta || (teta_min == teta && biga < alfa)) |
|||
q = j, teta_min = teta, biga = alfa; |
|||
} |
|||
return q; |
|||
} |
|||
|
|||
/*********************************************************************** |
|||
* spy_chuzc_harris - choose non-basic var. (dual Harris' ratio test) |
|||
* |
|||
* This routine implements dual Harris' ratio test to choose non-basic |
|||
* variable xN[q]. |
|||
* |
|||
* All the parameters, except tol and tol1, as well as the returned |
|||
* value have the same meaning as for the routine spx_chuzr_std (see |
|||
* above). |
|||
* |
|||
* The parameters tol and tol1 specify tolerances on zero bound |
|||
* violations for reduced costs of non-basic variables. For reduced |
|||
* cost d[j] the tolerance is delta[j] = tol + tol1 |cN[j]|, where |
|||
* cN[j] is objective coefficient at non-basic variable xN[j]. */ |
|||
|
|||
int spy_chuzc_harris(SPXLP *lp, const double d[/*1+n-m*/], |
|||
double s, const double trow[/*1+n-m*/], double tol_piv, |
|||
double tol, double tol1) |
|||
{ int m = lp->m; |
|||
int n = lp->n; |
|||
double *c = lp->c; |
|||
double *l = lp->l; |
|||
double *u = lp->u; |
|||
int *head = lp->head; |
|||
char *flag = lp->flag; |
|||
int j, k, q; |
|||
double alfa, biga, delta, teta, teta_min; |
|||
xassert(s == +1.0 || s == -1.0); |
|||
/*--------------------------------------------------------------*/ |
|||
/* first pass: determine teta_min for relaxed bounds */ |
|||
/*--------------------------------------------------------------*/ |
|||
teta_min = DBL_MAX; |
|||
/* walk thru the list of non-basic variables */ |
|||
for (j = 1; j <= n-m; j++) |
|||
{ k = head[m+j]; /* x[k] = xN[j] */ |
|||
/* if xN[j] is fixed variable, skip it */ |
|||
if (l[k] == u[k]) |
|||
continue; |
|||
alfa = s * trow[j]; |
|||
if (alfa >= +tol_piv && !flag[j]) |
|||
{ /* xN[j] is either free or has its lower bound active, so |
|||
* lambdaN[j] = d[j] >= 0 decreases down to zero */ |
|||
delta = tol + tol1 * (c[k] >= 0.0 ? +c[k] : -c[k]); |
|||
/* determine theta on which lambdaN[j] reaches -delta */ |
|||
teta = ((d[j] < 0.0 ? 0.0 : d[j]) + delta) / alfa; |
|||
} |
|||
else if (alfa <= -tol_piv && (l[k] == -DBL_MAX || flag[j])) |
|||
{ /* xN[j] is either free or has its upper bound active, so |
|||
* lambdaN[j] = d[j] <= 0 increases up to zero */ |
|||
delta = tol + tol1 * (c[k] >= 0.0 ? +c[k] : -c[k]); |
|||
/* determine theta on which lambdaN[j] reaches +delta */ |
|||
teta = ((d[j] > 0.0 ? 0.0 : d[j]) - delta) / alfa; |
|||
} |
|||
else |
|||
{ /* lambdaN[j] cannot reach zero on increasing theta */ |
|||
continue; |
|||
} |
|||
xassert(teta >= 0.0); |
|||
if (teta_min > teta) |
|||
teta_min = teta; |
|||
} |
|||
/*--------------------------------------------------------------*/ |
|||
/* second pass: choose non-basic variable xN[q] */ |
|||
/*--------------------------------------------------------------*/ |
|||
if (teta_min == DBL_MAX) |
|||
{ /* theta may increase unlimitedly */ |
|||
q = 0; |
|||
goto done; |
|||
} |
|||
/* nothing is chosen so far */ |
|||
q = 0, biga = 0.0; |
|||
/* walk thru the list of non-basic variables */ |
|||
for (j = 1; j <= n-m; j++) |
|||
{ k = head[m+j]; /* x[k] = xN[j] */ |
|||
/* if xN[j] is fixed variable, skip it */ |
|||
if (l[k] == u[k]) |
|||
continue; |
|||
alfa = s * trow[j]; |
|||
if (alfa >= +tol_piv && !flag[j]) |
|||
{ /* xN[j] is either free or has its lower bound active, so |
|||
* lambdaN[j] = d[j] >= 0 decreases down to zero */ |
|||
/* determine theta on which lambdaN[j] reaches zero */ |
|||
teta = d[j] / alfa; |
|||
} |
|||
else if (alfa <= -tol_piv && (l[k] == -DBL_MAX || flag[j])) |
|||
{ /* xN[j] is either free or has its upper bound active, so |
|||
* lambdaN[j] = d[j] <= 0 increases up to zero */ |
|||
/* determine theta on which lambdaN[j] reaches zero */ |
|||
teta = d[j] / alfa; |
|||
} |
|||
else |
|||
{ /* lambdaN[j] cannot reach zero on increasing theta */ |
|||
continue; |
|||
} |
|||
/* choose non-basic variable for which theta is not greater |
|||
* than theta_min determined for relaxed bounds and which has |
|||
* best (largest in magnitude) pivot */ |
|||
alfa = (alfa >= 0.0 ? +alfa : -alfa); |
|||
if (teta <= teta_min && biga < alfa) |
|||
q = j, biga = alfa; |
|||
} |
|||
/* something must be chosen */ |
|||
xassert(1 <= q && q <= n-m); |
|||
done: return q; |
|||
} |
|||
|
|||
/* eof */ |
@ -1,204 +0,0 @@ |
|||
## Build GLPK with Microsoft Visual Studio Express ## |
|||
|
|||
CFLAGS = \ |
|||
/I. \ |
|||
/I..\src \ |
|||
/I..\src\amd \ |
|||
/I..\src\bflib \ |
|||
/I..\src\cglib \ |
|||
/I..\src\colamd \ |
|||
/I..\src\env \ |
|||
/I..\src\minisat \ |
|||
/I..\src\misc \ |
|||
/I..\src\proxy \ |
|||
/I..\src\simplex \ |
|||
/I..\src\zlib \ |
|||
/DHAVE_CONFIG_H=1 \ |
|||
/D_CRT_SECURE_NO_WARNINGS=1 \ |
|||
/nologo \ |
|||
/W3 \ |
|||
/O2 \ |
|||
/Zi |
|||
|
|||
OBJSET = \ |
|||
..\src\avl.obj \ |
|||
..\src\bfd.obj \ |
|||
..\src\bfx.obj \ |
|||
..\src\glpapi01.obj \ |
|||
..\src\glpapi02.obj \ |
|||
..\src\glpapi03.obj \ |
|||
..\src\glpapi04.obj \ |
|||
..\src\glpapi05.obj \ |
|||
..\src\glpapi06.obj \ |
|||
..\src\glpapi07.obj \ |
|||
..\src\glpapi08.obj \ |
|||
..\src\glpapi09.obj \ |
|||
..\src\glpapi10.obj \ |
|||
..\src\glpapi11.obj \ |
|||
..\src\glpapi12.obj \ |
|||
..\src\glpapi13.obj \ |
|||
..\src\glpapi14.obj \ |
|||
..\src\glpapi15.obj \ |
|||
..\src\glpapi16.obj \ |
|||
..\src\glpapi17.obj \ |
|||
..\src\glpapi18.obj \ |
|||
..\src\glpapi19.obj \ |
|||
..\src\glpapi20.obj \ |
|||
..\src\glpapi21.obj \ |
|||
..\src\glpcpx.obj \ |
|||
..\src\glpdmx.obj \ |
|||
..\src\glpgmp.obj \ |
|||
..\src\glphbm.obj \ |
|||
..\src\glpini01.obj \ |
|||
..\src\glpini02.obj \ |
|||
..\src\glpios01.obj \ |
|||
..\src\glpios02.obj \ |
|||
..\src\glpios03.obj \ |
|||
..\src\glpios04.obj \ |
|||
..\src\glpios05.obj \ |
|||
..\src\glpios06.obj \ |
|||
..\src\glpios07.obj \ |
|||
..\src\glpios08.obj \ |
|||
..\src\glpios09.obj \ |
|||
..\src\glpios10.obj \ |
|||
..\src\glpios11.obj \ |
|||
..\src\glpios12.obj \ |
|||
..\src\glpipm.obj \ |
|||
..\src\glpmat.obj \ |
|||
..\src\glpmpl01.obj \ |
|||
..\src\glpmpl02.obj \ |
|||
..\src\glpmpl03.obj \ |
|||
..\src\glpmpl04.obj \ |
|||
..\src\glpmpl05.obj \ |
|||
..\src\glpmpl06.obj \ |
|||
..\src\glpmps.obj \ |
|||
..\src\glpnet03.obj \ |
|||
..\src\glpnet04.obj \ |
|||
..\src\glpnet05.obj \ |
|||
..\src\glpnpp01.obj \ |
|||
..\src\glpnpp02.obj \ |
|||
..\src\glpnpp03.obj \ |
|||
..\src\glpnpp04.obj \ |
|||
..\src\glpnpp05.obj \ |
|||
..\src\glpnpp06.obj \ |
|||
..\src\glprgr.obj \ |
|||
..\src\glpscl.obj \ |
|||
..\src\glpsdf.obj \ |
|||
..\src\glpspm.obj \ |
|||
..\src\glpsql.obj \ |
|||
..\src\glpssx01.obj \ |
|||
..\src\glpssx02.obj \ |
|||
..\src\lux.obj \ |
|||
..\src\amd\amd_1.obj \ |
|||
..\src\amd\amd_2.obj \ |
|||
..\src\amd\amd_aat.obj \ |
|||
..\src\amd\amd_control.obj \ |
|||
..\src\amd\amd_defaults.obj \ |
|||
..\src\amd\amd_dump.obj \ |
|||
..\src\amd\amd_info.obj \ |
|||
..\src\amd\amd_order.obj \ |
|||
..\src\amd\amd_post_tree.obj \ |
|||
..\src\amd\amd_postorder.obj \ |
|||
..\src\amd\amd_preprocess.obj \ |
|||
..\src\amd\amd_valid.obj \ |
|||
..\src\bflib\btf.obj \ |
|||
..\src\bflib\btfint.obj \ |
|||
..\src\bflib\fhv.obj \ |
|||
..\src\bflib\fhvint.obj \ |
|||
..\src\bflib\ifu.obj \ |
|||
..\src\bflib\luf.obj \ |
|||
..\src\bflib\lufint.obj \ |
|||
..\src\bflib\scf.obj \ |
|||
..\src\bflib\scfint.obj \ |
|||
..\src\bflib\sgf.obj \ |
|||
..\src\bflib\sva.obj \ |
|||
..\src\cglib\cfg.obj \ |
|||
..\src\cglib\cfg1.obj \ |
|||
..\src\colamd\colamd.obj \ |
|||
..\src\env\alloc.obj \ |
|||
..\src\env\dlsup.obj \ |
|||
..\src\env\env.obj \ |
|||
..\src\env\error.obj \ |
|||
..\src\env\stdout.obj \ |
|||
..\src\env\stream.obj \ |
|||
..\src\env\time.obj \ |
|||
..\src\env\tls.obj \ |
|||
..\src\minisat\minisat.obj \ |
|||
..\src\misc\bignum.obj \ |
|||
..\src\misc\dmp.obj \ |
|||
..\src\misc\ffalg.obj \ |
|||
..\src\misc\fp2rat.obj \ |
|||
..\src\misc\gcd.obj \ |
|||
..\src\misc\jd.obj \ |
|||
..\src\misc\keller.obj \ |
|||
..\src\misc\mc13d.obj \ |
|||
..\src\misc\mc21a.obj \ |
|||
..\src\misc\okalg.obj \ |
|||
..\src\misc\qmd.obj \ |
|||
..\src\misc\relax4.obj \ |
|||
..\src\misc\rng.obj \ |
|||
..\src\misc\rng1.obj \ |
|||
..\src\misc\round2n.obj \ |
|||
..\src\misc\str2int.obj \ |
|||
..\src\misc\str2num.obj \ |
|||
..\src\misc\strspx.obj \ |
|||
..\src\misc\strtrim.obj \ |
|||
..\src\misc\triang.obj \ |
|||
..\src\misc\wclique.obj \ |
|||
..\src\misc\wclique1.obj \ |
|||
..\src\proxy\proxy.obj \ |
|||
..\src\proxy\proxy1.obj \ |
|||
..\src\simplex\spxat.obj \ |
|||
..\src\simplex\spxchuzc.obj \ |
|||
..\src\simplex\spxchuzr.obj \ |
|||
..\src\simplex\spxlp.obj \ |
|||
..\src\simplex\spxnt.obj \ |
|||
..\src\simplex\spxprim.obj \ |
|||
..\src\simplex\spxprob.obj \ |
|||
..\src\simplex\spychuzc.obj \ |
|||
..\src\simplex\spychuzr.obj \ |
|||
..\src\simplex\spydual.obj \ |
|||
..\src\zlib\adler32.obj \ |
|||
..\src\zlib\compress.obj \ |
|||
..\src\zlib\crc32.obj \ |
|||
..\src\zlib\deflate.obj \ |
|||
..\src\zlib\gzclose.obj \ |
|||
..\src\zlib\gzlib.obj \ |
|||
..\src\zlib\gzread.obj \ |
|||
..\src\zlib\gzwrite.obj \ |
|||
..\src\zlib\inffast.obj \ |
|||
..\src\zlib\inflate.obj \ |
|||
..\src\zlib\inftrees.obj \ |
|||
..\src\zlib\trees.obj \ |
|||
..\src\zlib\uncompr.obj \ |
|||
..\src\zlib\zio.obj \ |
|||
..\src\zlib\zutil.obj |
|||
|
|||
.c.obj: |
|||
cl.exe $(CFLAGS) /Fo$*.obj /c $*.c |
|||
|
|||
all: glpk.lib glpsol.exe |
|||
|
|||
glpk.lib: $(OBJSET) |
|||
lib.exe /out:glpk.lib \ |
|||
..\src\*.obj \ |
|||
..\src\amd\*.obj \ |
|||
..\src\bflib\*.obj \ |
|||
..\src\cglib\*.obj \ |
|||
..\src\colamd\*.obj \ |
|||
..\src\env\*.obj \ |
|||
..\src\minisat\*.obj \ |
|||
..\src\misc\*.obj \ |
|||
..\src\proxy\*.obj \ |
|||
..\src\simplex\*.obj \ |
|||
..\src\zlib\*.obj |
|||
|
|||
glpsol.exe: ..\examples\glpsol.obj glpk.lib |
|||
cl.exe $(CFLAGS) /Feglpsol.exe \ |
|||
..\examples\glpsol.obj glpk.lib |
|||
|
|||
check: glpsol.exe |
|||
.\glpsol.exe --version |
|||
.\glpsol.exe --mps ..\examples\plan.mps |
|||
|
|||
## eof ## |
@ -1,205 +0,0 @@ |
|||
## Build GLPK DLL with Microsoft Visual Studio Express ## |
|||
|
|||
CFLAGS = \ |
|||
/I. \ |
|||
/I..\src \ |
|||
/I..\src\amd \ |
|||
/I..\src\bflib \ |
|||
/I..\src\cglib \ |
|||
/I..\src\colamd \ |
|||
/I..\src\env \ |
|||
/I..\src\minisat \ |
|||
/I..\src\misc \ |
|||
/I..\src\proxy \ |
|||
/I..\src\simplex \ |
|||
/I..\src\zlib \ |
|||
/DHAVE_CONFIG_H=1 \ |
|||
/D_CRT_SECURE_NO_WARNINGS=1 \ |
|||
/nologo \ |
|||
/W3 \ |
|||
/O2 \ |
|||
/Zi |
|||
|
|||
OBJSET = \ |
|||
..\src\avl.obj \ |
|||
..\src\bfd.obj \ |
|||
..\src\bfx.obj \ |
|||
..\src\glpapi01.obj \ |
|||
..\src\glpapi02.obj \ |
|||
..\src\glpapi03.obj \ |
|||
..\src\glpapi04.obj \ |
|||
..\src\glpapi05.obj \ |
|||
..\src\glpapi06.obj \ |
|||
..\src\glpapi07.obj \ |
|||
..\src\glpapi08.obj \ |
|||
..\src\glpapi09.obj \ |
|||
..\src\glpapi10.obj \ |
|||
..\src\glpapi11.obj \ |
|||
..\src\glpapi12.obj \ |
|||
..\src\glpapi13.obj \ |
|||
..\src\glpapi14.obj \ |
|||
..\src\glpapi15.obj \ |
|||
..\src\glpapi16.obj \ |
|||
..\src\glpapi17.obj \ |
|||
..\src\glpapi18.obj \ |
|||
..\src\glpapi19.obj \ |
|||
..\src\glpapi20.obj \ |
|||
..\src\glpapi21.obj \ |
|||
..\src\glpcpx.obj \ |
|||
..\src\glpdmx.obj \ |
|||
..\src\glpgmp.obj \ |
|||
..\src\glphbm.obj \ |
|||
..\src\glpini01.obj \ |
|||
..\src\glpini02.obj \ |
|||
..\src\glpios01.obj \ |
|||
..\src\glpios02.obj \ |
|||
..\src\glpios03.obj \ |
|||
..\src\glpios04.obj \ |
|||
..\src\glpios05.obj \ |
|||
..\src\glpios06.obj \ |
|||
..\src\glpios07.obj \ |
|||
..\src\glpios08.obj \ |
|||
..\src\glpios09.obj \ |
|||
..\src\glpios10.obj \ |
|||
..\src\glpios11.obj \ |
|||
..\src\glpios12.obj \ |
|||
..\src\glpipm.obj \ |
|||
..\src\glpmat.obj \ |
|||
..\src\glpmpl01.obj \ |
|||
..\src\glpmpl02.obj \ |
|||
..\src\glpmpl03.obj \ |
|||
..\src\glpmpl04.obj \ |
|||
..\src\glpmpl05.obj \ |
|||
..\src\glpmpl06.obj \ |
|||
..\src\glpmps.obj \ |
|||
..\src\glpnet03.obj \ |
|||
..\src\glpnet04.obj \ |
|||
..\src\glpnet05.obj \ |
|||
..\src\glpnpp01.obj \ |
|||
..\src\glpnpp02.obj \ |
|||
..\src\glpnpp03.obj \ |
|||
..\src\glpnpp04.obj \ |
|||
..\src\glpnpp05.obj \ |
|||
..\src\glpnpp06.obj \ |
|||
..\src\glprgr.obj \ |
|||
..\src\glpscl.obj \ |
|||
..\src\glpsdf.obj \ |
|||
..\src\glpspm.obj \ |
|||
..\src\glpsql.obj \ |
|||
..\src\glpssx01.obj \ |
|||
..\src\glpssx02.obj \ |
|||
..\src\lux.obj \ |
|||
..\src\amd\amd_1.obj \ |
|||
..\src\amd\amd_2.obj \ |
|||
..\src\amd\amd_aat.obj \ |
|||
..\src\amd\amd_control.obj \ |
|||
..\src\amd\amd_defaults.obj \ |
|||
..\src\amd\amd_dump.obj \ |
|||
..\src\amd\amd_info.obj \ |
|||
..\src\amd\amd_order.obj \ |
|||
..\src\amd\amd_post_tree.obj \ |
|||
..\src\amd\amd_postorder.obj \ |
|||
..\src\amd\amd_preprocess.obj \ |
|||
..\src\amd\amd_valid.obj \ |
|||
..\src\bflib\btf.obj \ |
|||
..\src\bflib\btfint.obj \ |
|||
..\src\bflib\fhv.obj \ |
|||
..\src\bflib\fhvint.obj \ |
|||
..\src\bflib\ifu.obj \ |
|||
..\src\bflib\luf.obj \ |
|||
..\src\bflib\lufint.obj \ |
|||
..\src\bflib\scf.obj \ |
|||
..\src\bflib\scfint.obj \ |
|||
..\src\bflib\sgf.obj \ |
|||
..\src\bflib\sva.obj \ |
|||
..\src\cglib\cfg.obj \ |
|||
..\src\cglib\cfg1.obj \ |
|||
..\src\colamd\colamd.obj \ |
|||
..\src\env\alloc.obj \ |
|||
..\src\env\dlsup.obj \ |
|||
..\src\env\env.obj \ |
|||
..\src\env\error.obj \ |
|||
..\src\env\stdout.obj \ |
|||
..\src\env\stream.obj \ |
|||
..\src\env\time.obj \ |
|||
..\src\env\tls.obj \ |
|||
..\src\minisat\minisat.obj \ |
|||
..\src\misc\bignum.obj \ |
|||
..\src\misc\dmp.obj \ |
|||
..\src\misc\ffalg.obj \ |
|||
..\src\misc\fp2rat.obj \ |
|||
..\src\misc\gcd.obj \ |
|||
..\src\misc\jd.obj \ |
|||
..\src\misc\keller.obj \ |
|||
..\src\misc\mc13d.obj \ |
|||
..\src\misc\mc21a.obj \ |
|||
..\src\misc\okalg.obj \ |
|||
..\src\misc\qmd.obj \ |
|||
..\src\misc\relax4.obj \ |
|||
..\src\misc\rng.obj \ |
|||
..\src\misc\rng1.obj \ |
|||
..\src\misc\round2n.obj \ |
|||
..\src\misc\str2int.obj \ |
|||
..\src\misc\str2num.obj \ |
|||
..\src\misc\strspx.obj \ |
|||
..\src\misc\strtrim.obj \ |
|||
..\src\misc\triang.obj \ |
|||
..\src\misc\wclique.obj \ |
|||
..\src\misc\wclique1.obj \ |
|||
..\src\proxy\proxy.obj \ |
|||
..\src\proxy\proxy1.obj \ |
|||
..\src\simplex\spxat.obj \ |
|||
..\src\simplex\spxchuzc.obj \ |
|||
..\src\simplex\spxchuzr.obj \ |
|||
..\src\simplex\spxlp.obj \ |
|||
..\src\simplex\spxnt.obj \ |
|||
..\src\simplex\spxprim.obj \ |
|||
..\src\simplex\spxprob.obj \ |
|||
..\src\simplex\spychuzc.obj \ |
|||
..\src\simplex\spychuzr.obj \ |
|||
..\src\simplex\spydual.obj \ |
|||
..\src\zlib\adler32.obj \ |
|||
..\src\zlib\compress.obj \ |
|||
..\src\zlib\crc32.obj \ |
|||
..\src\zlib\deflate.obj \ |
|||
..\src\zlib\gzclose.obj \ |
|||
..\src\zlib\gzlib.obj \ |
|||
..\src\zlib\gzread.obj \ |
|||
..\src\zlib\gzwrite.obj \ |
|||
..\src\zlib\inffast.obj \ |
|||
..\src\zlib\inflate.obj \ |
|||
..\src\zlib\inftrees.obj \ |
|||
..\src\zlib\trees.obj \ |
|||
..\src\zlib\uncompr.obj \ |
|||
..\src\zlib\zio.obj \ |
|||
..\src\zlib\zutil.obj |
|||
|
|||
.c.obj: |
|||
cl.exe $(CFLAGS) /Fo$*.obj /c $*.c |
|||
|
|||
all: glpk_4_57.dll glpsol.exe |
|||
|
|||
glpk_4_57.dll: $(OBJSET) |
|||
cl.exe $(CFLAGS) /LD /Feglpk_4_57.dll \ |
|||
..\src\*.obj \ |
|||
..\src\amd\*.obj \ |
|||
..\src\bflib\*.obj \ |
|||
..\src\cglib\*.obj \ |
|||
..\src\colamd\*.obj \ |
|||
..\src\env\*.obj \ |
|||
..\src\minisat\*.obj \ |
|||
..\src\misc\*.obj \ |
|||
..\src\proxy\*.obj \ |
|||
..\src\simplex\*.obj \ |
|||
..\src\zlib\*.obj \ |
|||
glpk_4_57.def |
|||
|
|||
glpsol.exe: ..\examples\glpsol.obj glpk_4_57.dll |
|||
cl.exe $(CFLAGS) /Feglpsol.exe \ |
|||
..\examples\glpsol.obj glpk_4_57.lib |
|||
|
|||
check: glpsol.exe |
|||
.\glpsol.exe --version |
|||
.\glpsol.exe --mps ..\examples\plan.mps |
|||
|
|||
## eof ## |
@ -1,204 +0,0 @@ |
|||
## Build GLPK with Microsoft Visual Studio Express ## |
|||
|
|||
CFLAGS = \ |
|||
/I. \ |
|||
/I..\src \ |
|||
/I..\src\amd \ |
|||
/I..\src\bflib \ |
|||
/I..\src\cglib \ |
|||
/I..\src\colamd \ |
|||
/I..\src\env \ |
|||
/I..\src\minisat \ |
|||
/I..\src\misc \ |
|||
/I..\src\proxy \ |
|||
/I..\src\simplex \ |
|||
/I..\src\zlib \ |
|||
/DHAVE_CONFIG_H=1 \ |
|||
/D_CRT_SECURE_NO_WARNINGS=1 \ |
|||
/nologo \ |
|||
/W3 \ |
|||
/O2 \ |
|||
/Zi |
|||
|
|||
OBJSET = \ |
|||
..\src\avl.obj \ |
|||
..\src\bfd.obj \ |
|||
..\src\bfx.obj \ |
|||
..\src\glpapi01.obj \ |
|||
..\src\glpapi02.obj \ |
|||
..\src\glpapi03.obj \ |
|||
..\src\glpapi04.obj \ |
|||
..\src\glpapi05.obj \ |
|||
..\src\glpapi06.obj \ |
|||
..\src\glpapi07.obj \ |
|||
..\src\glpapi08.obj \ |
|||
..\src\glpapi09.obj \ |
|||
..\src\glpapi10.obj \ |
|||
..\src\glpapi11.obj \ |
|||
..\src\glpapi12.obj \ |
|||
..\src\glpapi13.obj \ |
|||
..\src\glpapi14.obj \ |
|||
..\src\glpapi15.obj \ |
|||
..\src\glpapi16.obj \ |
|||
..\src\glpapi17.obj \ |
|||
..\src\glpapi18.obj \ |
|||
..\src\glpapi19.obj \ |
|||
..\src\glpapi20.obj \ |
|||
..\src\glpapi21.obj \ |
|||
..\src\glpcpx.obj \ |
|||
..\src\glpdmx.obj \ |
|||
..\src\glpgmp.obj \ |
|||
..\src\glphbm.obj \ |
|||
..\src\glpini01.obj \ |
|||
..\src\glpini02.obj \ |
|||
..\src\glpios01.obj \ |
|||
..\src\glpios02.obj \ |
|||
..\src\glpios03.obj \ |
|||
..\src\glpios04.obj \ |
|||
..\src\glpios05.obj \ |
|||
..\src\glpios06.obj \ |
|||
..\src\glpios07.obj \ |
|||
..\src\glpios08.obj \ |
|||
..\src\glpios09.obj \ |
|||
..\src\glpios10.obj \ |
|||
..\src\glpios11.obj \ |
|||
..\src\glpios12.obj \ |
|||
..\src\glpipm.obj \ |
|||
..\src\glpmat.obj \ |
|||
..\src\glpmpl01.obj \ |
|||
..\src\glpmpl02.obj \ |
|||
..\src\glpmpl03.obj \ |
|||
..\src\glpmpl04.obj \ |
|||
..\src\glpmpl05.obj \ |
|||
..\src\glpmpl06.obj \ |
|||
..\src\glpmps.obj \ |
|||
..\src\glpnet03.obj \ |
|||
..\src\glpnet04.obj \ |
|||
..\src\glpnet05.obj \ |
|||
..\src\glpnpp01.obj \ |
|||
..\src\glpnpp02.obj \ |
|||
..\src\glpnpp03.obj \ |
|||
..\src\glpnpp04.obj \ |
|||
..\src\glpnpp05.obj \ |
|||
..\src\glpnpp06.obj \ |
|||
..\src\glprgr.obj \ |
|||
..\src\glpscl.obj \ |
|||
..\src\glpsdf.obj \ |
|||
..\src\glpspm.obj \ |
|||
..\src\glpsql.obj \ |
|||
..\src\glpssx01.obj \ |
|||
..\src\glpssx02.obj \ |
|||
..\src\lux.obj \ |
|||
..\src\amd\amd_1.obj \ |
|||
..\src\amd\amd_2.obj \ |
|||
..\src\amd\amd_aat.obj \ |
|||
..\src\amd\amd_control.obj \ |
|||
..\src\amd\amd_defaults.obj \ |
|||
..\src\amd\amd_dump.obj \ |
|||
..\src\amd\amd_info.obj \ |
|||
..\src\amd\amd_order.obj \ |
|||
..\src\amd\amd_post_tree.obj \ |
|||
..\src\amd\amd_postorder.obj \ |
|||
..\src\amd\amd_preprocess.obj \ |
|||
..\src\amd\amd_valid.obj \ |
|||
..\src\bflib\btf.obj \ |
|||
..\src\bflib\btfint.obj \ |
|||
..\src\bflib\fhv.obj \ |
|||
..\src\bflib\fhvint.obj \ |
|||
..\src\bflib\ifu.obj \ |
|||
..\src\bflib\luf.obj \ |
|||
..\src\bflib\lufint.obj \ |
|||
..\src\bflib\scf.obj \ |
|||
..\src\bflib\scfint.obj \ |
|||
..\src\bflib\sgf.obj \ |
|||
..\src\bflib\sva.obj \ |
|||
..\src\cglib\cfg.obj \ |
|||
..\src\cglib\cfg1.obj \ |
|||
..\src\colamd\colamd.obj \ |
|||
..\src\env\alloc.obj \ |
|||
..\src\env\dlsup.obj \ |
|||
..\src\env\env.obj \ |
|||
..\src\env\error.obj \ |
|||
..\src\env\stdout.obj \ |
|||
..\src\env\stream.obj \ |
|||
..\src\env\time.obj \ |
|||
..\src\env\tls.obj \ |
|||
..\src\minisat\minisat.obj \ |
|||
..\src\misc\bignum.obj \ |
|||
..\src\misc\dmp.obj \ |
|||
..\src\misc\ffalg.obj \ |
|||
..\src\misc\fp2rat.obj \ |
|||
..\src\misc\gcd.obj \ |
|||
..\src\misc\jd.obj \ |
|||
..\src\misc\keller.obj \ |
|||
..\src\misc\mc13d.obj \ |
|||
..\src\misc\mc21a.obj \ |
|||
..\src\misc\okalg.obj \ |
|||
..\src\misc\qmd.obj \ |
|||
..\src\misc\relax4.obj \ |
|||
..\src\misc\rng.obj \ |
|||
..\src\misc\rng1.obj \ |
|||
..\src\misc\round2n.obj \ |
|||
..\src\misc\str2int.obj \ |
|||
..\src\misc\str2num.obj \ |
|||
..\src\misc\strspx.obj \ |
|||
..\src\misc\strtrim.obj \ |
|||
..\src\misc\triang.obj \ |
|||
..\src\misc\wclique.obj \ |
|||
..\src\misc\wclique1.obj \ |
|||
..\src\proxy\proxy.obj \ |
|||
..\src\proxy\proxy1.obj \ |
|||
..\src\simplex\spxat.obj \ |
|||
..\src\simplex\spxchuzc.obj \ |
|||
..\src\simplex\spxchuzr.obj \ |
|||
..\src\simplex\spxlp.obj \ |
|||
..\src\simplex\spxnt.obj \ |
|||
..\src\simplex\spxprim.obj \ |
|||
..\src\simplex\spxprob.obj \ |
|||
..\src\simplex\spychuzc.obj \ |
|||
..\src\simplex\spychuzr.obj \ |
|||
..\src\simplex\spydual.obj \ |
|||
..\src\zlib\adler32.obj \ |
|||
..\src\zlib\compress.obj \ |
|||
..\src\zlib\crc32.obj \ |
|||
..\src\zlib\deflate.obj \ |
|||
..\src\zlib\gzclose.obj \ |
|||
..\src\zlib\gzlib.obj \ |
|||
..\src\zlib\gzread.obj \ |
|||
..\src\zlib\gzwrite.obj \ |
|||
..\src\zlib\inffast.obj \ |
|||
..\src\zlib\inflate.obj \ |
|||
..\src\zlib\inftrees.obj \ |
|||
..\src\zlib\trees.obj \ |
|||
..\src\zlib\uncompr.obj \ |
|||
..\src\zlib\zio.obj \ |
|||
..\src\zlib\zutil.obj |
|||
|
|||
.c.obj: |
|||
cl.exe $(CFLAGS) /Fo$*.obj /c $*.c |
|||
|
|||
all: glpk.lib glpsol.exe |
|||
|
|||
glpk.lib: $(OBJSET) |
|||
lib.exe /out:glpk.lib \ |
|||
..\src\*.obj \ |
|||
..\src\amd\*.obj \ |
|||
..\src\bflib\*.obj \ |
|||
..\src\cglib\*.obj \ |
|||
..\src\colamd\*.obj \ |
|||
..\src\env\*.obj \ |
|||
..\src\minisat\*.obj \ |
|||
..\src\misc\*.obj \ |
|||
..\src\proxy\*.obj \ |
|||
..\src\simplex\*.obj \ |
|||
..\src\zlib\*.obj |
|||
|
|||
glpsol.exe: ..\examples\glpsol.obj glpk.lib |
|||
cl.exe $(CFLAGS) /Feglpsol.exe \ |
|||
..\examples\glpsol.obj glpk.lib |
|||
|
|||
check: glpsol.exe |
|||
.\glpsol.exe --version |
|||
.\glpsol.exe --mps ..\examples\plan.mps |
|||
|
|||
## eof ## |
@ -1,205 +0,0 @@ |
|||
## Build GLPK DLL with Microsoft Visual Studio Express ## |
|||
|
|||
CFLAGS = \ |
|||
/I. \ |
|||
/I..\src \ |
|||
/I..\src\amd \ |
|||
/I..\src\bflib \ |
|||
/I..\src\cglib \ |
|||
/I..\src\colamd \ |
|||
/I..\src\env \ |
|||
/I..\src\minisat \ |
|||
/I..\src\misc \ |
|||
/I..\src\proxy \ |
|||
/I..\src\simplex \ |
|||
/I..\src\zlib \ |
|||
/DHAVE_CONFIG_H=1 \ |
|||
/D_CRT_SECURE_NO_WARNINGS=1 \ |
|||
/nologo \ |
|||
/W3 \ |
|||
/O2 \ |
|||
/Zi |
|||
|
|||
OBJSET = \ |
|||
..\src\avl.obj \ |
|||
..\src\bfd.obj \ |
|||
..\src\bfx.obj \ |
|||
..\src\glpapi01.obj \ |
|||
..\src\glpapi02.obj \ |
|||
..\src\glpapi03.obj \ |
|||
..\src\glpapi04.obj \ |
|||
..\src\glpapi05.obj \ |
|||
..\src\glpapi06.obj \ |
|||
..\src\glpapi07.obj \ |
|||
..\src\glpapi08.obj \ |
|||
..\src\glpapi09.obj \ |
|||
..\src\glpapi10.obj \ |
|||
..\src\glpapi11.obj \ |
|||
..\src\glpapi12.obj \ |
|||
..\src\glpapi13.obj \ |
|||
..\src\glpapi14.obj \ |
|||
..\src\glpapi15.obj \ |
|||
..\src\glpapi16.obj \ |
|||
..\src\glpapi17.obj \ |
|||
..\src\glpapi18.obj \ |
|||
..\src\glpapi19.obj \ |
|||
..\src\glpapi20.obj \ |
|||
..\src\glpapi21.obj \ |
|||
..\src\glpcpx.obj \ |
|||
..\src\glpdmx.obj \ |
|||
..\src\glpgmp.obj \ |
|||
..\src\glphbm.obj \ |
|||
..\src\glpini01.obj \ |
|||
..\src\glpini02.obj \ |
|||
..\src\glpios01.obj \ |
|||
..\src\glpios02.obj \ |
|||
..\src\glpios03.obj \ |
|||
..\src\glpios04.obj \ |
|||
..\src\glpios05.obj \ |
|||
..\src\glpios06.obj \ |
|||
..\src\glpios07.obj \ |
|||
..\src\glpios08.obj \ |
|||
..\src\glpios09.obj \ |
|||
..\src\glpios10.obj \ |
|||
..\src\glpios11.obj \ |
|||
..\src\glpios12.obj \ |
|||
..\src\glpipm.obj \ |
|||
..\src\glpmat.obj \ |
|||
..\src\glpmpl01.obj \ |
|||
..\src\glpmpl02.obj \ |
|||
..\src\glpmpl03.obj \ |
|||
..\src\glpmpl04.obj \ |
|||
..\src\glpmpl05.obj \ |
|||
..\src\glpmpl06.obj \ |
|||
..\src\glpmps.obj \ |
|||
..\src\glpnet03.obj \ |
|||
..\src\glpnet04.obj \ |
|||
..\src\glpnet05.obj \ |
|||
..\src\glpnpp01.obj \ |
|||
..\src\glpnpp02.obj \ |
|||
..\src\glpnpp03.obj \ |
|||
..\src\glpnpp04.obj \ |
|||
..\src\glpnpp05.obj \ |
|||
..\src\glpnpp06.obj \ |
|||
..\src\glprgr.obj \ |
|||
..\src\glpscl.obj \ |
|||
..\src\glpsdf.obj \ |
|||
..\src\glpspm.obj \ |
|||
..\src\glpsql.obj \ |
|||
..\src\glpssx01.obj \ |
|||
..\src\glpssx02.obj \ |
|||
..\src\lux.obj \ |
|||
..\src\amd\amd_1.obj \ |
|||
..\src\amd\amd_2.obj \ |
|||
..\src\amd\amd_aat.obj \ |
|||
..\src\amd\amd_control.obj \ |
|||
..\src\amd\amd_defaults.obj \ |
|||
..\src\amd\amd_dump.obj \ |
|||
..\src\amd\amd_info.obj \ |
|||
..\src\amd\amd_order.obj \ |
|||
..\src\amd\amd_post_tree.obj \ |
|||
..\src\amd\amd_postorder.obj \ |
|||
..\src\amd\amd_preprocess.obj \ |
|||
..\src\amd\amd_valid.obj \ |
|||
..\src\bflib\btf.obj \ |
|||
..\src\bflib\btfint.obj \ |
|||
..\src\bflib\fhv.obj \ |
|||
..\src\bflib\fhvint.obj \ |
|||
..\src\bflib\ifu.obj \ |
|||
..\src\bflib\luf.obj \ |
|||
..\src\bflib\lufint.obj \ |
|||
..\src\bflib\scf.obj \ |
|||
..\src\bflib\scfint.obj \ |
|||
..\src\bflib\sgf.obj \ |
|||
..\src\bflib\sva.obj \ |
|||
..\src\cglib\cfg.obj \ |
|||
..\src\cglib\cfg1.obj \ |
|||
..\src\colamd\colamd.obj \ |
|||
..\src\env\alloc.obj \ |
|||
..\src\env\dlsup.obj \ |
|||
..\src\env\env.obj \ |
|||
..\src\env\error.obj \ |
|||
..\src\env\stdout.obj \ |
|||
..\src\env\stream.obj \ |
|||
..\src\env\time.obj \ |
|||
..\src\env\tls.obj \ |
|||
..\src\minisat\minisat.obj \ |
|||
..\src\misc\bignum.obj \ |
|||
..\src\misc\dmp.obj \ |
|||
..\src\misc\ffalg.obj \ |
|||
..\src\misc\fp2rat.obj \ |
|||
..\src\misc\gcd.obj \ |
|||
..\src\misc\jd.obj \ |
|||
..\src\misc\keller.obj \ |
|||
..\src\misc\mc13d.obj \ |
|||
..\src\misc\mc21a.obj \ |
|||
..\src\misc\okalg.obj \ |
|||
..\src\misc\qmd.obj \ |
|||
..\src\misc\relax4.obj \ |
|||
..\src\misc\rng.obj \ |
|||
..\src\misc\rng1.obj \ |
|||
..\src\misc\round2n.obj \ |
|||
..\src\misc\str2int.obj \ |
|||
..\src\misc\str2num.obj \ |
|||
..\src\misc\strspx.obj \ |
|||
..\src\misc\strtrim.obj \ |
|||
..\src\misc\triang.obj \ |
|||
..\src\misc\wclique.obj \ |
|||
..\src\misc\wclique1.obj \ |
|||
..\src\proxy\proxy.obj \ |
|||
..\src\proxy\proxy1.obj \ |
|||
..\src\simplex\spxat.obj \ |
|||
..\src\simplex\spxchuzc.obj \ |
|||
..\src\simplex\spxchuzr.obj \ |
|||
..\src\simplex\spxlp.obj \ |
|||
..\src\simplex\spxnt.obj \ |
|||
..\src\simplex\spxprim.obj \ |
|||
..\src\simplex\spxprob.obj \ |
|||
..\src\simplex\spychuzc.obj \ |
|||
..\src\simplex\spychuzr.obj \ |
|||
..\src\simplex\spydual.obj \ |
|||
..\src\zlib\adler32.obj \ |
|||
..\src\zlib\compress.obj \ |
|||
..\src\zlib\crc32.obj \ |
|||
..\src\zlib\deflate.obj \ |
|||
..\src\zlib\gzclose.obj \ |
|||
..\src\zlib\gzlib.obj \ |
|||
..\src\zlib\gzread.obj \ |
|||
..\src\zlib\gzwrite.obj \ |
|||
..\src\zlib\inffast.obj \ |
|||
..\src\zlib\inflate.obj \ |
|||
..\src\zlib\inftrees.obj \ |
|||
..\src\zlib\trees.obj \ |
|||
..\src\zlib\uncompr.obj \ |
|||
..\src\zlib\zio.obj \ |
|||
..\src\zlib\zutil.obj |
|||
|
|||
.c.obj: |
|||
cl.exe $(CFLAGS) /Fo$*.obj /c $*.c |
|||
|
|||
all: glpk_4_57.dll glpsol.exe |
|||
|
|||
glpk_4_57.dll: $(OBJSET) |
|||
cl.exe $(CFLAGS) /LD /Feglpk_4_57.dll \ |
|||
..\src\*.obj \ |
|||
..\src\amd\*.obj \ |
|||
..\src\bflib\*.obj \ |
|||
..\src\cglib\*.obj \ |
|||
..\src\colamd\*.obj \ |
|||
..\src\env\*.obj \ |
|||
..\src\minisat\*.obj \ |
|||
..\src\misc\*.obj \ |
|||
..\src\proxy\*.obj \ |
|||
..\src\simplex\*.obj \ |
|||
..\src\zlib\*.obj \ |
|||
glpk_4_57.def |
|||
|
|||
glpsol.exe: ..\examples\glpsol.obj glpk_4_57.dll |
|||
cl.exe $(CFLAGS) /Feglpsol.exe \ |
|||
..\examples\glpsol.obj glpk_4_57.lib |
|||
|
|||
check: glpsol.exe |
|||
.\glpsol.exe --version |
|||
.\glpsol.exe --mps ..\examples\plan.mps |
|||
|
|||
## eof ## |
@ -1,3 +1,525 @@ |
|||
Thu Feb 16 10:00:00 2018 Andrew Makhorin <mao@gnu.org> |
|||
|
|||
* GLPK 4.65 (43:0:3) has been released. |
|||
|
|||
* src/glpk.h, src/api/npp.c |
|||
New API routines for LP/MIP preprocessing were added: |
|||
glp_npp_alloc_wksp allocate the preprocessor workspace |
|||
glp_npp_load_prob load original problem instance |
|||
glp_npp_preprocess1 perform basic LP/MIP preprocessing |
|||
glp_npp_build_prob build resultant problem instance |
|||
glp_npp_postprocess postprocess solution to resultant problem |
|||
glp_npp_obtain_sol obtain solution to original problem |
|||
glp_npp_free_wksp free the preprocessor workspace |
|||
See doc/npp.txt for detailed description of these API routines. |
|||
|
|||
* examples/nppsamp.c |
|||
An example program to demonstrate using of LP/MIP preprocessor |
|||
was added. |
|||
|
|||
The following modules were renamed to simplify maintenance. |
|||
* src/draft/glpnpp.h RENAMED -> src/npp/npp.h |
|||
* src/draft/glpnpp01.c RENAMED -> src/npp/npp1.c |
|||
* src/draft/glpnpp02.c RENAMED -> src/npp/npp2.c |
|||
* src/draft/glpnpp03.c RENAMED -> src/npp/npp3.c |
|||
* src/draft/glpnpp04.c RENAMED -> src/npp/npp4.c |
|||
* src/draft/glpnpp05.c RENAMED -> src/npp/npp5.c |
|||
* src/draft/glpnpp06.c RENAMED -> src/npp/npp6.c |
|||
* src/bflib/fvs.h RENAMED -> src/misc/fvs.h |
|||
* src/bflib/fvs.c RENAMED -> src/misc/fvs.c |
|||
* src/draft/glpios.h RENAMED -> src/draft/ios.h |
|||
* src/cglib/ RENAMED -> src/intopt/ |
|||
* src/draft/glpios10.c RENAMED -> src/intopt/fpump.c |
|||
|
|||
* src/glpk.h, src/intopt/covgen.c |
|||
A new, more robust implementation of locally valid simple cover |
|||
cuts was included in the MIP solver. |
|||
|
|||
* src/draft/ios.h, src/draft/glpios01.c, src/draft/glpios03.c |
|||
These modules were changed to use the new cover cut generator. |
|||
|
|||
* src/misc/ks.c, src/misc/ks.h |
|||
Routines to solve 0-1 knapsack problem (used by the new cover |
|||
cut generator) were added. |
|||
|
|||
* src/misc/mt1.c, src/misc/mt1.h, src/misc/mt1.f |
|||
Routines to solve 0-1 knapsack problem with Martello & Toth |
|||
algorithm (used by the new cover cut generator) were added. |
|||
(The original Fortran 77 code mt1.f is included for reference |
|||
purposes only.) |
|||
|
|||
* src/draft/glpapi09.c |
|||
The API routine glp_init_iocp was changed to enable long-step |
|||
dual simplex by default. |
|||
|
|||
* src/api/cplex.c |
|||
The internal routine col_name routine was changed to construct |
|||
a fake column name depending on the column's attributes. |
|||
|
|||
* examples/glpsol.c |
|||
A new option --hide was added. This option removes all symbolic |
|||
names from the model being processed. |
|||
|
|||
* src/env/stdc.h |
|||
CDECL macro was added. (This macro is defined by config.h only |
|||
on building the GLPK DLL with MSVC.) |
|||
The following modules affected by this change were changed: |
|||
* src/api/cpxbas.c |
|||
* src/draft/glpios11.c |
|||
* src/intopt/cfg1.c |
|||
* src/intopt/fpump.c |
|||
* src/intopt/gmigen.c |
|||
* src/intopt/mirgen.c |
|||
* src/misc/wclique1.c |
|||
* src/simplex/spxchuzr.c |
|||
* src/simplex/spychuzc.c |
|||
|
|||
Sat Dec 02 12:00:00 2017 Andrew Makhorin <mao@gnu.org> |
|||
|
|||
* GLPK 4.64 (42:3:2) has been released. |
|||
|
|||
* src/simplex/spydual.c |
|||
The internal routine play_coef of the dual simplex solver was |
|||
changed to perform more aggressive perturbation to prevent dual |
|||
degeneracy and avoid stalling even if the current dual basic |
|||
solution is strongly feasible (mainly if the objective is zero, |
|||
so all reduced costs are always zero). Thanks to David Monniaux |
|||
<David.Monniaux@univ-grenoble-alpes.fr> for bug report. |
|||
|
|||
* src/draft/glpssx.h, glpssx02.c, glpapi07.c |
|||
The exact simplex solver routines were changed to perform |
|||
terminal output according to the verbosity level (specified by |
|||
the control parameter smcp.msg_lev). Thanks to Jeroen Demeyer |
|||
<jdemeyer@cage.ugent.be> for bug report. |
|||
|
|||
* src/simplex/spxchuzr.c |
|||
The directive #include <config.h> was added. Thanks to Heinrich |
|||
Schuchardt <xypron.glpk@gmx.de> for bug report. |
|||
|
|||
* examples/graceful.mod |
|||
An example model in MathProg was added. Thanks to Mike Appleby |
|||
<mike@app.leby.org> for contribution. |
|||
|
|||
* examples/powpl25h.mod powplant.mod wolfra6d.lp wolfra6d.mod |
|||
Three example models in MathProg and one in Cplex LP format |
|||
were added. Thanks to Peter Naszvadi <vuk@cs.elte.hu> for |
|||
contribution. |
|||
|
|||
Tue Jul 25 12:00:00 2017 Andrew Makhorin <mao@gnu.org> |
|||
|
|||
* GLPK 4.63 (42:2:2) has been released. |
|||
|
|||
* src/simplex/spxchuzr.h, src/simplex/spxchuzr.c |
|||
An experimental feature (phase I long-step ratio test) was |
|||
included in the primal simplex solver. |
|||
|
|||
* src/simplex/spxprim.c, src/simplex/spydual.c |
|||
An internal scaling of the objective coefficients was added to |
|||
the primal and dual simplex solvers. |
|||
|
|||
* src/simplex/spxprim.c |
|||
A minor bug was fixed (correction of flags of fixed non-basic |
|||
variables after removing the perturbation). |
|||
|
|||
* src/glpk.h, src/glpapi06.c |
|||
New smcp parameters were added (not documented yet): |
|||
int excl (default: GLP_ON) |
|||
Internal simplex solver option: |
|||
GLP_ON - exclude fixed non-basic variables from the working LP; |
|||
GLP_OFF - keep original variables in the working LP. |
|||
int shift (default: GLP_ON) |
|||
Internal simplex solver option: |
|||
GLP_ON - shift bounds of variables in the working LP tow. zero; |
|||
GLP_OFF - keep original bounds of variables in the working LP. |
|||
int aorn (default: GLP_USE_NT) |
|||
Internal simplex solver option: |
|||
GLP_USE_AT - use A matrix in sparse row-wise format; |
|||
GLP_USE_NT - use N matrix in sparse row-wise format. |
|||
Parameter out_frq was changed to specify the output frequency |
|||
in milliseconds rather than in simplex iterations. |
|||
|
|||
src/env/time.c |
|||
The Posix version of glp_time was replaced by new one, which |
|||
doesn't use gmtime functions to improve portability. Thanks to |
|||
Rob Schroeder <Rob.Schroeder@graphicpkg.com> for bug report. |
|||
|
|||
src/spv.c, src/spv.h |
|||
These files were moved to src/cglib/, since they are used only |
|||
in the MIR cuts generator. |
|||
|
|||
examples/life_goe.mod, examples/tiling.mod, examples/toto.mod |
|||
Three new example models in MathProg were added. Thanks to |
|||
Peter Naszvadi <vuk@cs.elte.hu> for contribution. |
|||
|
|||
Wed Jun 14 12:00:00 2017 Andrew Makhorin <mao@gnu.org> |
|||
|
|||
* GLPK 4.62 (42:1:2) has been released. |
|||
|
|||
* src/simplex/spxprim.c |
|||
An experimental feature (bound perturbation) to improve |
|||
numerical stabilty and avoid cycling was included in the primal |
|||
simplex solver. Currently it is enabled by default. |
|||
|
|||
* src/simplex/spxprim.c |
|||
Some dense vectors were replaced by sparse ones in full-vector |
|||
storage (FVS) format. |
|||
|
|||
* src/simplex/spxprim.c, src/simplex/spydual.c |
|||
Assertions trow[q] != 0.0 and tcol[p] != 0.0 were replaced by |
|||
setting an error code to prevent abnormal termination. Thanks |
|||
to Chris Matrakidis <cmatraki@gmail.com> for patch. |
|||
|
|||
* src/simplex/spydual.c |
|||
Removing perturbation was added if the perturbed problem is |
|||
dual infeasible while the original one is dual feasible. Thanks |
|||
to Chris Matrakidis <cmatraki@gmail.com> for patch. |
|||
|
|||
* src/api/mps.c |
|||
A range bug was fixed. |
|||
Thanks to Chris Matrakidis <cmatraki@gmail.com> for patch. |
|||
|
|||
* src/minisat/minisat.c |
|||
Changes were made to provide 64-bit portability. Thanks to |
|||
Chris Matrakidis <cmatraki@gmail.com> for patch. |
|||
|
|||
* src/api/minisat1.c |
|||
Changes related to the minisat solver were made. Thanks to |
|||
Chris Matrakidis <cmatraki@gmail.com> for patch. |
|||
|
|||
* src/api/intfeas1.c |
|||
Changes were made to skip objective integrality check when |
|||
no objective bound is specified. Thanks to Chris Matrakidis |
|||
<cmatraki@gmail.com> for patch. |
|||
|
|||
* src/glphbm.c, src/glprgr.c, src/env/stream.c, src/env/time.c, |
|||
* src/mpl/mpl5.c, src/mpl/mpl6.c, src/mpl/mplsql.c |
|||
Calls to non-thread-safe functions gmtime, strerror, and strtok |
|||
were replaced by calls to corresponding thread-safe equivalents |
|||
(gmtime_r, strerror_r, and strtok_r for GNU/Linux). |
|||
|
|||
* w32/*.def, w64/*.def |
|||
glp_config symbol was added. Thanks to Heinrich Schuchardt |
|||
<xypron.glpk@gmx.de> for bug report. |
|||
|
|||
* examples/pbn/pbn.mod |
|||
A bug was fixed (model didn't work for odd number of rows or |
|||
columns). Thanks to Chris Matrakidis <cmatraki@gmail.com> for |
|||
bug report and patch provided. |
|||
|
|||
Sun Jan 22 12:00:00 2017 Andrew Makhorin <mao@gnu.org> |
|||
|
|||
* GLPK 4.61 (42:0:2) has been released. |
|||
|
|||
The following modules were renamed to simplify maintenance. |
|||
* src/prob.h RENAMED -> src/api/prob.h |
|||
* src/glpapi01.c RENAMED -> src/api/prob1.c |
|||
* src/glpapi02.c RENAMED -> src/api/prob2.c |
|||
* src/glpapi03.c RENAMED -> src/api/prob3.c |
|||
* src/glpapi04.c RENAMED -> src/api/prob4.c |
|||
* src/glpapi05.c RENAMED -> src/api/prob5.c |
|||
|
|||
* src/env/tls.c |
|||
TLS (thread local storage class specifier) option was added; |
|||
see comments in tls.c for details. |
|||
|
|||
* configure.ac, config.h.in |
|||
Test for TLS was added. |
|||
Thanks to David Monniaux <david.monniaux@imag.fr> for |
|||
suggestion and Chris Matrakidis <cmatraki@gmail.com> for patch. |
|||
|
|||
* src/env/tls.c |
|||
Dll support was added. |
|||
Thanks to Heinrich Schuchardt <xypron.glpk@gmx.de> for |
|||
contribution. |
|||
|
|||
The following modules were changed to add __cdecl specifier |
|||
for functions passed to qsort (this is needed only on compiling |
|||
GLPK with MSVC to run under MS Windows). |
|||
* src/api/cpxbas.c |
|||
* src/cglib/cfg1.c |
|||
* src/cglib/gmigen.c |
|||
* src/cglib/mirgen.c |
|||
* src/misc/wclique1.c |
|||
* src/simplex/spychuzc.c |
|||
* src/glpios10.c |
|||
* src/glpios11.c |
|||
* examples/glpsol.c |
|||
|
|||
* src/glpk.h, src/env/env.c |
|||
The API routine glp_version was changed to avoid initialization |
|||
of the GLPK environment. The new API routine glp_config was |
|||
added (but not documented yet). Thanks to Heinrich Schuchardt |
|||
<xypron.glpk@gmx.de> for suggestion. |
|||
|
|||
* INSTALL |
|||
Description of the configure option '--with-zlib' was removed. |
|||
Thanks to Balaco Baco <balacobaco@imap.cc> for bug report. |
|||
|
|||
Fri Apr 01 12:00:00 2016 Andrew Makhorin <mao@gnu.org> |
|||
|
|||
* GLPK 4.60 (41:0:1) has been released. |
|||
|
|||
* src/glpk.h |
|||
Declarations of all non-documented API routines were hidden by |
|||
#ifdef GLP_UNDOC / #endif. |
|||
|
|||
src/simplex/spydual.c |
|||
An experimental feature (objective coefficient perturbation) |
|||
to improve numerical stabilty and avoid cycling was included in |
|||
the dual simplex solver. |
|||
|
|||
This release also includes all the changes made in 4.59.2 and |
|||
4.59.1 non-official test releases (see below). |
|||
|
|||
Fri Mar 18 12:00:00 2016 Andrew Makhorin <mao@gnu.org> |
|||
|
|||
* GLPK 4.59.2 (40:1:0) has been released. |
|||
|
|||
NOTE: THIS IS A NON-OFFICIAL TEST RELEASE. |
|||
|
|||
src/simplex/spxprim.c |
|||
Improvements were made in the internal routine choose_pivot to |
|||
prevent choosing a too small pivot in the primal simplex. |
|||
|
|||
src/simplex/spydual.c |
|||
Improvements were made in the internal routine choose_pivot to |
|||
prevent choosing a too small pivot in the dual simplex. |
|||
|
|||
src/simplex/spychuzc.c |
|||
The internal routine spy_eval_bp was added to determine break- |
|||
points of the dual objective function. |
|||
|
|||
src/simplex/spydual.c |
|||
An experimental feature (long-step ratio test) was included in |
|||
the dual simplex. |
|||
|
|||
src/glpk.h, src/glpapi06.c |
|||
The GLP_RT_FLIP option (long-step ratio test) was added to |
|||
the simplex solver. Currently it affects only the dual simplex. |
|||
For the primal simplex it is equivalent to GLP_RT_HAR. |
|||
|
|||
src/examples/glpsol.c |
|||
The '--flip' command-line option was added to glpsol (long-step |
|||
dual ratio test). |
|||
|
|||
src/proxy/proxy1.c |
|||
Additional check was added to reject wrong solutions somwtimes |
|||
reported by the PROXY heuristic. |
|||
|
|||
src/glpios10.c |
|||
A bug (memory leak) was fixed in the FPUMP heuristic routine. |
|||
Thanks to <nicolas.derhy@engie.com> for bug report. |
|||
|
|||
Tue Mar 15 12:00:00 2016 Andrew Makhorin <mao@gnu.org> |
|||
|
|||
* GLPK 4.59.1 (40:1:0) has been released. |
|||
|
|||
NOTE: THIS IS A NON-OFFICIAL BUG-FIX RELEASE. |
|||
|
|||
* src/simplex/mpl6.c, src/simplex/sql.c, src/simplex/sql.h |
|||
The header sql.h was renamed to avoid conflicts with standard |
|||
ODBC headers. Thanks to Noli Sicad <nsicad@gmail.com> for bug |
|||
report. |
|||
|
|||
* src/simplex/spychuzc.c, src/simplex/spychuzc.h |
|||
Minor changes were made. |
|||
|
|||
Fri Mar 11 12:00:00 2016 Andrew Makhorin <mao@gnu.org> |
|||
|
|||
* GLPK 4.59 (40:0:0) has been released. |
|||
|
|||
* src/sgf.c, src/sgf.h |
|||
The routines sgf_reduce_nuc and sgf_factorize were changed to |
|||
correctly report structural singularity. |
|||
|
|||
* src/glpios01.c |
|||
The routine ios_solve_node was changed to retry solving node |
|||
problem in case of the simplex solver failure. Thanks to Chris |
|||
Matrakidis <cmatraki@gmail.com> for patch. |
|||
|
|||
* src/glpios03.c |
|||
The routine ios_driver was changed to correctly process the |
|||
root node. Thanks to Chris Matrakidis <cmatraki@gmail.com> for |
|||
patch. |
|||
|
|||
* src/glpios06.c |
|||
Some improvements were made in the MIR cut generation routines. |
|||
Thanks to Chris Matrakidis <cmatraki@gmail.com> for patch. |
|||
|
|||
The following source modules were splitted/renamed to simplify |
|||
maintenance. |
|||
* src/glpios04.c RENAMED -> src/spv.c |
|||
* src/glpios05.c glp_gmi_cut (new) -> src/cglib/gmicut.c |
|||
* src/glpios05.c glp_gmi_gen (new) -> src/cglib/gmigen.c |
|||
* src/glpios05.c REMOVED |
|||
* src/glpios06.c glp_mir_init (new) -> src/cglib/mirgen.c |
|||
* src/glpios06.c glp_mir_gen (new) -> src/cglib/mirgen.c |
|||
* src/glpios06.c glp_mir_free (new) -> src/cglib/mirgen.c |
|||
* src/glpios06.c REMOVED |
|||
* src/glpios08.c glp_cfg_init (new) -> src/cglib/cfg2.c |
|||
* src/glpios08.c glp_cfg_free (new) -> src/cglib/cfg2.c |
|||
* src/glpios08.c glp_clq_cut (new) -> src/cglib/clqcut.c |
|||
* src/glpios08.c REMOVED |
|||
* src/glpmpl.h RENAMED -> src/mpl/mpl.h |
|||
* src/glpmpl01.c RENAMED -> src/mpl/mpl1.c |
|||
* src/glpmpl02.c RENAMED -> src/mpl/mpl2.c |
|||
* src/glpmpl03.c RENAMED -> src/mpl/mpl3.c |
|||
* src/glpmpl04.c RENAMED -> src/mpl/mpl4.c |
|||
* src/glpmpl05.c RENAMED -> src/mpl/mpl5.c |
|||
* src/glpmpl06.c RENAMED -> src/mpl/mpl6.c |
|||
* src/glpsql.h RENAMED -> src/mpl/sql.h |
|||
* src/glpsql.c RENAMED -> src/mpl/sql.c |
|||
|
|||
* src/proxy/proxy.c |
|||
Minor bug was fixed in the PROXY heuristic routine. Thanks to |
|||
Chris Matrakidis <cmatraki@gmail.com> for bug report. |
|||
|
|||
* src/cglib/gmicut.c, src/glpk.h |
|||
New API routine glp_gmi_cut was added (not documented yet). |
|||
|
|||
* src/cglib/gmigen.c, src/glpk.h |
|||
New API routine glp_gmi_gen was added (not documented yet). |
|||
|
|||
* src/cglib/mirgen.c, src/glpk.h |
|||
New API routines glp_mir_init, glp_mir_gen, and glp_mir_free |
|||
were added (not documented yet). |
|||
|
|||
* src/cglib/cfg2.c, src/glpk.h |
|||
New API routines glp_cfg_init and glp_cfg_free were added (not |
|||
documented yet). |
|||
|
|||
* src/cglib/clqcut.c, src/glpk.h |
|||
New API routine glp_clq_cut was added (not documented yet). |
|||
|
|||
* src/api/rdcc.c, src/api/wrcc.c |
|||
API routines glp_read_graph and glp_write_graph were changed |
|||
due to changes in the data format. For details see the document |
|||
"GLPK: Graph and Network Routines". |
|||
|
|||
* src/api/rdgr.c, src/api/wrgr.c, src/glpsdf.c, src/glpsdf.h |
|||
Old versions of API routines glp_read_graph and glp_write_graph |
|||
were removed. |
|||
|
|||
* doc/gmpl_pt-BR.tex, doc/gmpl_pt-BR.pdf |
|||
Translation of the document "Modeling Language GNU MathProg" |
|||
to Brazilian Portuguese (pt-BR) was included (in LaTeX and pdf |
|||
formats). Thanks to Joao Flavio de Freitas Almeida |
|||
<joao.flavio@dep.ufmg.br> for contribution. |
|||
|
|||
Thu Feb 18 12:00:00 2016 Andrew Makhorin <mao@gnu.org> |
|||
|
|||
* GLPK 4.58 (39:0:0) has been released. |
|||
|
|||
* src/misc/dimacs.c, src/misc/dimacs.h |
|||
Routines to read data files in DIMACS format were implemented |
|||
as a separate module. |
|||
|
|||
The following source modules were splitted/renamed to simplify |
|||
maintenance. |
|||
* src/glpapi11.c glp_print_sol -> src/api/prsol.c |
|||
* src/glpapi11.c glp_read_sol -> src/api/rdsol.c |
|||
* src/glpapi11.c glp_write_sol -> src/api/wrsol.c |
|||
* src/glpapi11.c glp_print_ipt -> src/api/pript.c |
|||
* src/glpapi11.c glp_read_ipt -> src/api/rdipt.c |
|||
* src/glpapi11.c glp_write_ipt -> src/api/wript.c |
|||
* src/glpapi11.c glp_print_mip -> src/api/prmip.c |
|||
* src/glpapi11.c glp_read_mip -> src/api/rdmip.c |
|||
* src/glpapi11.c glp_write_mip -> src/api/wrmip.c |
|||
* src/glpapi11.c glp_print_ranges -> src/api/prrngs.c |
|||
* src/glpapi11.c REMOVED |
|||
* src/glpapi14.c RENAMED -> src/api/mpl.c |
|||
* src/glpapi15.c glp_read_graph -> src/api/rdgr.c |
|||
* src/glpapi15.c glp_write_graph -> src/api/wrgr.c |
|||
* src/glpapi15.c REMOVED |
|||
* src/glpapi16.c glp_weak_comp -> src/api/weak.c |
|||
* src/glpapi16.c glp_strong_comp -> src/api/strong.c |
|||
* src/glpapi16.c glp_top_sort -> src/api/topsort.c |
|||
* src/glpapi16.c REMOVED |
|||
* src/glpapi17.c glp_mincost_lp -> src/api/mcflp.c |
|||
* src/glpapi17.c glp_mincost_okalg -> src/api/mcfokalg.c |
|||
* src/glpapi17.c glp_mincost_relax4 -> src/api/mcfrelax.c |
|||
* src/glpapi17.c glp_maxflow_lp -> src/api/maxflp.c |
|||
* src/glpapi17.c glp_maxflow_ffalg -> src/api/maxffalg.c |
|||
* src/glpapi17.c glp_check_asnprob -> src/api/ckasn.c |
|||
* src/glpapi17.c glp_asnprob_lp -> src/api/asnlp.c |
|||
* src/glpapi17.c glp_asnprob_okalg -> src/api/asnokalg.c |
|||
* src/glpapi17.c glp_asnprob_hall -> src/api/asnhall.c |
|||
* src/glpapi17.c glp_cpp -> src/api/cpp.c |
|||
* src/glpapi17.c REMOVED |
|||
* src/glpapi18.c glp_wclique_exact -> src/api/wcliqex.c |
|||
* src/glpapi18.c REMOVED |
|||
* src/glpapi19.c RENAMED -> src/api/minisat1.c |
|||
* src/glpapi20.c RENAMED -> src/api/intfeas1.c |
|||
* src/glpapi21.c RENAMED -> examples/glpsol.c |
|||
* src/glpcpx.c RENAMED -> src/api/cplex.c |
|||
* src/glpdmx.c glp_read_mincost -> src/api/rdmcf.c |
|||
* src/glpdmx.c glp_write_mincost -> src/api/wrmcf.c |
|||
* src/glpdmx.c glp_read_maxflow -> src/api/rdmaxf.c |
|||
* src/glpdmx.c glp_write_maxflow -> src/api/wrmaxf.c |
|||
* src/glpdmx.c glp_read_asnprob -> src/api/rdasn.c |
|||
* src/glpdmx.c glp_write_asnprob -> src/api/wrasn.c |
|||
* src/glpdmx.c glp_read_ccdata -> src/api/rdcc.c |
|||
* src/glpdmx.c glp_write_ccdata -> src/api/wrcc.c |
|||
* src/glpdmx.c glp_read_prob -> src/api/rdprob.c |
|||
* src/glpdmx.c glp_write_prob -> src/api/wrprob.c |
|||
* src/glpdmx.c glp_read_cnfsat -> src/api/rdcnf.c |
|||
* src/glpdmx.c glp_write_cnfsat -> src/api/wrcnf.c |
|||
* src/glpdmx.c glp_check_cnfsat -> src/api/ckcnf.c |
|||
* src/glpdmx.c REMOVED |
|||
* src/glpgmp.c RENAMED -> src/misc/mygmp.c |
|||
* src/glpini01.c RENAMED -> src/api/advbas.c |
|||
* src/glpini02.c RENAMED -> src/api/cpxbas.c |
|||
* src/glpmps.c RENAMED -> src/api/mps.c |
|||
* src/glpnet03.c RENAMED -> src/api/netgen.c |
|||
* src/glpnet04.c RENAMED -> src/api/gridgen.c |
|||
* src/glpnet05.c RENAMED -> src/api/rmfgen.c |
|||
|
|||
The following source modules were changed due to changes in the |
|||
data formats: |
|||
* src/api/rdsol.c |
|||
* src/api/wrsol.c |
|||
* src/api/rdipt.c |
|||
* src/api/wript.c |
|||
* src/api/rdmip.c |
|||
* src/api/wrmip.c |
|||
|
|||
* src/glpk.h |
|||
New API routines were added: glp_mpl_init_rand (not documented |
|||
yet), glp_time, glp_difftime. The API routine glp_main (glpsol |
|||
main routine) was removed. |
|||
|
|||
* src/glpmpl.h, src/glpmpl01.c, src/glpmpl03.c |
|||
The function tan (trigonometric tangent) was added to MathProg. |
|||
Thanks to Chris Matrakidis <cmatraki@gmail.com> for patch. |
|||
|
|||
* src/simplex/spydual.c |
|||
A minor typo in dual simplex (GLP_EITLIM instead of GLP_ETMLIM) |
|||
was fixed. Thanks to Chris Matrakidis <cmatraki@gmail.com> for |
|||
patch. |
|||
|
|||
* src/glpapi09.c, src/glpios01.c, src/glpios03.c |
|||
A time limit problem was fixed. Thanks to Chris Matrakidis |
|||
<cmatraki@gmail.com> for patch. |
|||
|
|||
* doc/gmpl_es.tex, doc/gmpl_es.pdf |
|||
A new version of the document "Modeling Language GNU MathProg" |
|||
in Spanish was included (in LaTeX and pdf formats). Thanks to |
|||
Pablo Yapura <ypf@agro.unlp.edu.ar> for contribution. |
|||
|
|||
* configure.ac |
|||
A check to determine if libtool needs '-no-undefined' flag to |
|||
build shared libraries on some platforms was added. |
|||
Thanks to Marco Atzeri <marco.atzeri@gmail.com> and Heinrich |
|||
Schuchardt <xypron.glpk@gmx.de> for suggestion. |
|||
|
|||
* autogen.sh |
|||
A script to regenerate the configure script and the Makefiles |
|||
was added. Thanks to Heinrich Schuchardt <xypron.glpk@gmx.de>. |
|||
|
|||
* w32/glpk.def, w64/glpk.def |
|||
'glp_at_error' symbol was added to the export list. Thanks to |
|||
Heinrich Schuchardt <xypron.glpk@gmx.de> for bug report. |
|||
|
|||
Sun Nov 08 12:00:00 2015 Andrew Makhorin <mao@gnu.org> |
|||
|
|||
* GLPK 4.57 (38:0:2) has been released. |
@ -1,3 +1,191 @@ |
|||
GLPK 4.65 (release date: Feb 16, 2018) |
|||
|
|||
The following new API routines for LP/MIP preprocessing were |
|||
added: |
|||
|
|||
glp_npp_alloc_wksp allocate the preprocessor workspace |
|||
glp_npp_load_prob load original problem instance |
|||
glp_npp_preprocess1 perform basic LP/MIP preprocessing |
|||
glp_npp_build_prob build resultant problem instance |
|||
glp_npp_postprocess postprocess solution to resultant problem |
|||
glp_npp_obtain_sol obtain solution to original problem |
|||
glp_npp_free_wksp free the preprocessor workspace |
|||
|
|||
See doc/npp.txt for detailed description of these API routines. |
|||
|
|||
A new, more robust implementation of locally valid simple cover |
|||
cuts was included in the MIP solver. |
|||
|
|||
The API routine glp_init_iocp was changed to enable long-step |
|||
option of the dual simplex by default. |
|||
|
|||
GLPK 4.64 (release date: Dec 02, 2017) |
|||
|
|||
The dual simplex solver routine was changed to perform more |
|||
aggressive perturbation to prevent dual degeneracy and avoid |
|||
stalling even if the current dual basic solution is strongly |
|||
feasible (mainly if the objective is zero). Thanks to David |
|||
Monniaux <David.Monniaux@univ-grenoble-alpes.fr> for bug report |
|||
and example model. |
|||
|
|||
The exact simplex solver routine was changed to perform |
|||
terminal output according to the verbosity level (specified by |
|||
the control parameter smcp.msg_lev). Thanks to Jeroen Demeyer |
|||
<jdemeyer@cage.ugent.be> for bug report. |
|||
|
|||
A minor bug (related to MS Windows version) was fixed. Thanks |
|||
to Heinrich Schuchardt <xypron.glpk@gmx.de> for bug report. |
|||
|
|||
An example model (Graceful Tree Labeling Problem) in MathProg |
|||
was added. Thanks to Mike Appleby <mike@app.leby.org> for |
|||
contribution. |
|||
|
|||
Three example models (Power plant LP scheduler, Neumann CA |
|||
grid emulator generator) in MathProg and one in Cplex LP format |
|||
were added. Thanks to Peter Naszvadi <vuk@cs.elte.hu> for |
|||
contribution. |
|||
|
|||
GLPK 4.63 (release date: Jul 25, 2017) |
|||
|
|||
A "smart" LP perturbation was implemented in the primal and |
|||
dual simplex solvers. Now LP is perturbed only if it is |
|||
necessary, and by default perturbation is not activated. |
|||
The sum of primal infeasibilites that appears in the terminal |
|||
output of the primal simplex solver (as "inf = ...") now |
|||
corresponds to the original bounds of variables. This allows to |
|||
see how much perturbed solution violates the original bounds. |
|||
|
|||
The long-step technique was implemented for phase I of the |
|||
primal simplex solver. This feature can be enabled by |
|||
specifying --flip option for glpsol or by specifying |
|||
glp_smcp.r_test = GLP_RT_FLIP on api level. For many LP |
|||
instances the long-step technique allows reducing the number |
|||
of simplex iterations to 30-70%. Please note that unlike the |
|||
dual simplex, where this technique can be used on both phase I |
|||
and II, for the primal simplex it can be used only on phase I, |
|||
where the sum of primal infeasibilities (which is a convex |
|||
piecewise linear function) is minimized. |
|||
|
|||
An internal objective scaling was included in both primal and |
|||
dual simplex solvers. For many LP/MIP instances this feature |
|||
improves numerical stability (for the dual solver) and prevents |
|||
cycling near the optimum (for the primal solver). |
|||
|
|||
The Posix version of glp_time (glpk/src/env/time.c) was changed |
|||
to resolve time_t issue on msys2. Thanks to Rob Schroeder |
|||
<Rob.Schroeder@graphicpkg.com> for bug report. |
|||
|
|||
Three new example models in MathProg were added: |
|||
life_goe.mod (Conway's Game of Life garden of eden checker); |
|||
tiling.mod (Rectifiable polyomino tilings generator); |
|||
toto.mod (Covering code generator). |
|||
Thanks to Peter Naszvadi <vuk@cs.elte.hu> for contribution. |
|||
|
|||
GLPK 4.62 (release date: Jun 14, 2017) |
|||
|
|||
The bound perturbation technique was included in the primal |
|||
simplex solver to improve numerical stability and avoid cycling. |
|||
Currently this feature is enabled by default. |
|||
|
|||
A range bug was fixed in the MPS reading routine. Thanks to |
|||
Chris Matrakidis <cmatraki@gmail.com> for bug report and patch. |
|||
|
|||
Changes were made to provide 64-bit portability of the Minisat |
|||
solver. Thanks to Chris Matrakidis <cmatraki@gmail.com> for |
|||
patch. |
|||
|
|||
Calls to non-thread-safe functions gmtime, strerror, and strtok |
|||
were replaced by calls to corresponding thread-safe equivalents |
|||
(gmtime_r, strerror_r, and strtok_r for GNU/Linux). |
|||
|
|||
GLPK 4.61 (release date: Jan 22, 2017) |
|||
|
|||
An option was added to build a re-entrant version of the |
|||
package suitable for running in a multi-threaded environment. |
|||
This option is enabled by default on configuring the package |
|||
if the compiler used supports the thread local storage class |
|||
specifier (e.g. _Thread_local or __thread). Thanks to |
|||
David Monniaux <david.monniaux@imag.fr> for suggestion and |
|||
Chris Matrakidis <cmatraki@gmail.com> for configure.ac patch. |
|||
|
|||
A re-entrant version of the package allows running multiple |
|||
independent instances of glpk in different threads of a multi- |
|||
threaded application. Note that glpk is not thread-safe by |
|||
design, so if the application calls glpk routines from multiple |
|||
threads, no thread may access glpk program objects (glp_prob, |
|||
glp_tree, etc.) created by other threads; besides, each thread |
|||
before termination should call the API routine glp_free_env to |
|||
prevent memory leak. |
|||
|
|||
A DLL support was added. Thanks to Heinrich Schuchardt |
|||
<xypron.glpk@gmx.de> for contribution. |
|||
|
|||
Some changes were made to allow compiling the package using |
|||
stdcall calling convention (this is needed only on compiling |
|||
GLPK with MSVC to run under MS Windows). |
|||
|
|||
GLPK 4.60 (release date: Apr 01, 2016) |
|||
|
|||
Some improvements were made in the primal and dual simplex |
|||
solvers to make the solution process more numerically stable. |
|||
|
|||
An experimental long-step ratio test feature was added to the |
|||
dual simplex. On API level this feature is available thru the |
|||
GLP_RT_FLIP option. For glpsol it is available thru the options |
|||
--flip (for MIP) or --flip and --dual (for LP). This feature is |
|||
not documented yet. |
|||
|
|||
Additional check was added to reject wrong solutions sometimes |
|||
reported by the PROXY heuristic. |
|||
|
|||
A bug (memory leak) was fixed in the FPUMP heuristic routine. |
|||
Thanks to <nicolas.derhy@engie.com> for bug report. |
|||
|
|||
The header sql.h was renamed to avoid conflicts with standard |
|||
ODBC headers. Thanks to Noli Sicad <nsicad@gmail.com> for bug |
|||
report. |
|||
|
|||
GLPK 4.59 (release date: Mar 11, 2016) |
|||
|
|||
This is a maintainer release. |
|||
|
|||
Some bugs were fixed and some improvements were made in the MIP |
|||
solver. Thanks to Chris Matrakidis <cmatraki@gmail.com> for bug |
|||
reports and patches. |
|||
|
|||
The data file format used by API routines glp_read_graph and |
|||
glp_write_graph was changed. For more details please see the |
|||
document "GLPK: Graph and Network Routines" included in the |
|||
distribution. |
|||
|
|||
Translation of the document "Modeling Language GNU MathProg" |
|||
to Brazilian Portuguese (pt-BR) was included (in LaTeX and pdf |
|||
formats). Thanks to Joao Flavio de Freitas Almeida |
|||
<joao.flavio@dep.ufmg.br> for contribution. |
|||
|
|||
GLPK 4.58 (release date: Feb 18, 2016) |
|||
|
|||
The solution file format used by API routines glp_read_sol, |
|||
glp_write_sol, glp_read_ipt, glp_write_ipt, glp_read_mip, and |
|||
glp_write_mip was changed. For more details please see the GLPK |
|||
reference manual included in the distribution. |
|||
|
|||
The tan function (trigonometric tangent) was added to |
|||
GNU MathProg modeling language. Thanks to Chris Matrakidis |
|||
<cmatraki@gmail.com> for contribution. |
|||
|
|||
A new version of the document "Modeling Language GNU MathProg" |
|||
in Spanish was included (in LaTeX and pdf formats). Thanks to |
|||
Pablo Yapura <ypf@agro.unlp.edu.ar> for contribution. |
|||
|
|||
A check to determine if libtool needs '-no-undefined' flag to |
|||
build shared libraries on some platforms was added. |
|||
Thanks to Marco Atzeri <marco.atzeri@gmail.com> and Heinrich |
|||
Schuchardt <xypron.glpk@gmx.de> for suggestion. |
|||
|
|||
A script to regenerate the configure script and the Makefiles |
|||
was added. Thanks to Heinrich Schuchardt <xypron.glpk@gmx.de>. |
|||
|
|||
GLPK 4.57 (release date: Nov 08, 2015) |
|||
|
|||
A new, more efficient implementation of the dual simplex method |
@ -0,0 +1,27 @@ |
|||
#!/bin/sh |
|||
|
|||
######################################################################## |
|||
# Run this script on the top level of GLPK directory to regenerate the |
|||
# configure script and the Makefiles from templates. |
|||
# |
|||
# NOTE: You need to have GNU autotools installed. |
|||
######################################################################## |
|||
|
|||
set -e |
|||
|
|||
test -f configure.ac || { |
|||
echo "You should run this script on the top level of GLPK directory." |
|||
exit |
|||
} |
|||
|
|||
echo "Executing libtoolize..." |
|||
libtoolize -c -f |
|||
echo "Executing aclocal..." |
|||
aclocal -I m4 |
|||
echo "Executing autoconf..." |
|||
autoconf |
|||
echo "Executing automake..." |
|||
automake -c -a |
|||
echo "Done." |
|||
|
|||
echo "See file INSTALL for installation instructions." |
830
resources/3rdparty/glpk-4.65/doc/glpk03.tex
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
7893
resources/3rdparty/glpk-4.65/doc/gmpl_pt-BR.tex
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,283 @@ |
|||
@.@ LP/MIP PREPROCESSING ROUTINES |
|||
================================= |
|||
|
|||
@.@.1 Introduction |
|||
|
|||
GLPK has a set of routines that constitute so called the LP/MIP |
|||
preprocessor. Its main purpose is to improve a given formulation of the |
|||
LP or MIP problem instance provided by the user. |
|||
|
|||
As a rule the LP/MIP preprocessor is used internally (if enabled) in |
|||
the LP or MIP solver. However, for various reasons the user may need |
|||
to call the preprocessing routines directly in his/her application |
|||
program, in which case he/she may use API routines described in this |
|||
section. |
|||
|
|||
The preprocessing of an LP/MIP problem instance and recovering its |
|||
solution include several steps, which are performed in the following |
|||
order. |
|||
|
|||
1. Allocating the workspace. The preprocessor allocates the workspace, |
|||
an internal data structure used on all subsequent steps. |
|||
|
|||
2. Loading the original problem instance. The preprocessor copies all |
|||
the problem components from the original problem object (glp_prob) |
|||
specified by the user into the workspace. On this step the user also |
|||
should specify the solution type: basic solution (assumes the |
|||
primal or dual simplex solver), interior-point solution (assumes the |
|||
interior-point solver), or MIP solution (assumes the MIP solver). |
|||
This is needed, because some preprocessing transformations depend on |
|||
the solution type. |
|||
|
|||
3. Preprocessing. The user calls preprocessing routines that transform |
|||
the problem instance residing in the workspace. |
|||
|
|||
4. Building the resultant problem instance. The preprocessor converts |
|||
the problem instance from an internal workspace representation |
|||
to the standard problem object (glp_prob) and returns that object to |
|||
the user. |
|||
|
|||
5. Solving the resultant problem instance. The user calls an |
|||
appropriate solver routine to obtain a solution to the resultant |
|||
problem instance. |
|||
|
|||
6. Postprocessing. The user provides the solution to the resultant |
|||
problem instance found on the previous step, and the preprocessor |
|||
performs inverse transformations to recover the solution to the |
|||
original problem instance. Should note that only optimal or integer |
|||
feasible (for MIP) solutions can be recovered. |
|||
|
|||
7. Obtaining original solution. The preprocessor copies the solution |
|||
to the original problem instance recovered on the previous step from |
|||
the workspace to the original problem object (glp_prob). The effect |
|||
is the same as if the solution were computed by a solver. Note that |
|||
steps 6 and 7 can be performed multiple times (for example, to |
|||
recover intermediate integer feasible solutions during the integer |
|||
optimization). |
|||
|
|||
8. Freeing the workspace. The preprocessor frees all the memory |
|||
allocated to the workspace. |
|||
|
|||
EXAMPLE |
|||
|
|||
In this example the program reads the LP problem data from input file |
|||
murtagh.mps\footnote{This is an example model included in the GLPK |
|||
distribution.}, performs standard preprocessing, solves the resultant |
|||
LP with the primal simplex method, and then recovers the solution to |
|||
the original LP. |
|||
|
|||
/* nppsamp.c */ |
|||
|
|||
#include <stdio.h> |
|||
#include <stdlib.h> |
|||
#include <glpk.h> |
|||
|
|||
int main(void) |
|||
{ glp_prep *npp; |
|||
glp_prob *P, *Q; |
|||
int ret; |
|||
npp = glp_npp_alloc_wksp(); |
|||
P = glp_create_prob(); |
|||
ret = glp_read_mps(P, GLP_MPS_DECK, NULL, "murtagh.mps"); |
|||
if (ret != 0) |
|||
{ printf("Error on reading problem data\n"); |
|||
goto skip; |
|||
} |
|||
glp_set_obj_dir(P, GLP_MAX); |
|||
glp_npp_load_prob(npp, P, GLP_SOL, GLP_ON); |
|||
ret = glp_npp_preprocess1(npp, 0); |
|||
switch (ret) |
|||
{ case 0: |
|||
break; |
|||
case GLP_ENOPFS: |
|||
printf("LP has no primal feasible solution\n"); |
|||
goto skip; |
|||
case GLP_ENODFS: |
|||
printf("LP has no dual feasible solution\n"); |
|||
goto skip; |
|||
default: |
|||
xassert(ret != ret); |
|||
} |
|||
Q = glp_create_prob(); |
|||
glp_npp_build_prob(npp, Q); |
|||
ret = glp_simplex(Q, NULL); |
|||
if (ret == 0 && glp_get_status(Q) == GLP_OPT) |
|||
{ glp_npp_postprocess(npp, Q); |
|||
glp_npp_obtain_sol(npp, P); |
|||
} |
|||
else |
|||
printf("Unable to recover non-optimal solution\n"); |
|||
glp_delete_prob(Q); |
|||
skip: glp_npp_free_wksp(npp); |
|||
glp_delete_prob(P); |
|||
return 0; |
|||
} |
|||
|
|||
/* eof */ |
|||
------------------------------------------------------------------------ |
|||
@.@.2 glp_npp_alloc_wksp - allocate the preprocessor workspace |
|||
|
|||
SYNOPSIS |
|||
|
|||
glp_prep *glp_npp_alloc_wksp(void); |
|||
|
|||
DESCRIPTION |
|||
|
|||
The routine glp_npp_alloc_wksp allocates the preprocessor workspace. |
|||
(Note that multiple instances of the workspace may be allocated, if |
|||
necessary.) |
|||
|
|||
RETURNS |
|||
|
|||
The routine returns a pointer to the workspace, which should be used in |
|||
all subsequent operations. |
|||
------------------------------------------------------------------------ |
|||
@.@.3 glp_npp_load_prob - load original problem instance |
|||
|
|||
SYNOPSIS |
|||
|
|||
void glp_npp_load_prob(glp_prep *prep, glp_prob *P, int sol, |
|||
int names); |
|||
|
|||
DESCRIPTION |
|||
|
|||
The routine glp_npp_load_prob loads the original problem instance from |
|||
the specified problem object P into the preprocessor workspace. (Note |
|||
that this operation can be performed only once.) |
|||
|
|||
The parameter sol specifies which solution is required: |
|||
|
|||
GLP_SOL - basic solution; |
|||
|
|||
GLP_IPT - interior-point solution; |
|||
|
|||
GLP_MIP - mixed integer solution. |
|||
|
|||
The parameter names is a flag. If it is GLP_ON, the symbolic names of |
|||
original rows and columns are also loaded into the workspace. Otherwise, |
|||
if the flag is GLP_OFF, the row and column names are not loaded. |
|||
------------------------------------------------------------------------ |
|||
@.@.4 glp_npp_preprocess1 - perform basic LP/MIP preprocessing |
|||
|
|||
SYNOPSIS |
|||
|
|||
int glp_npp_preprocess1(glp_prep *prep, int hard); |
|||
|
|||
DESCRIPTION |
|||
|
|||
The routine glp_npp_preprocess1 performs basic LP/MIP preprocessing |
|||
that currently includes: |
|||
|
|||
-- removing free rows; |
|||
|
|||
-- replacing double-sided constraint rows with almost identical bounds, |
|||
by equality constraint rows; |
|||
|
|||
-- removing fixed columns; |
|||
|
|||
-- replacing double-bounded columns with almost identical bounds by |
|||
fixed columns and removing those columns; |
|||
|
|||
-- removing empty rows; |
|||
|
|||
-- removing equality constraint row singletons and corresponding |
|||
columns; |
|||
|
|||
-- removing inequality constraint row singletons and corresponding |
|||
columns; |
|||
|
|||
-- performing general row analysis; |
|||
|
|||
-- removing redundant row bounds; |
|||
|
|||
-- removing forcing rows and corresponding columns; |
|||
|
|||
-- removing rows which become free due to redundant bounds; |
|||
|
|||
-- computing implied bounds for all columns and using them to |
|||
strengthen current column bounds (MIP only, optional, performed if |
|||
the flag hard is on); |
|||
|
|||
-- fixing and removing empty columns; |
|||
|
|||
-- removing column singletons, which are implied slack variables, and |
|||
corresponding rows; |
|||
|
|||
-- removing bounds of columns, which are implied free variables, and |
|||
replacing corresponding rows by equality constraints. |
|||
|
|||
If the flag hard is GLP_ON, the routine attempts to improve current |
|||
column bounds multiple times within the main processing loop, in which |
|||
case this feature may take a time. Otherwise, if the flag hard is |
|||
GLP_OFF, improving column bounds is performed only once at the end of |
|||
the main loop. (Note that this feature is used for MIP only.) |
|||
|
|||
RETURNS |
|||
|
|||
0 - the problem instance has been successfully preprocessed; |
|||
|
|||
GLP_ENOPFS - primal/integer infeasibility has been detected; |
|||
|
|||
GLP_ENODFS - dual infeasibility has been detected. |
|||
------------------------------------------------------------------------ |
|||
@.@.5 glp_npp_build_prob - build resultant problem instance |
|||
|
|||
SYNOPSIS |
|||
|
|||
void glp_npp_build_prob(glp_prep *prep, glp_prob *Q); |
|||
|
|||
DESCRIPTION |
|||
|
|||
The routine glp_npp_build_prob obtains all necessary information from |
|||
the preprocessor workspace to build the resultant (preprocessed) |
|||
problem instance, and stores it in the specified problem object Q. Note |
|||
that before building the current content of this problem object is |
|||
erased with the routine glp_erase_prob. |
|||
------------------------------------------------------------------------ |
|||
@.@.6 glp_npp_postprocess - postprocess solution to resultant problem |
|||
|
|||
SYNOPSIS |
|||
|
|||
void glp_npp_postprocess(glp_prep *prep, glp_prob *Q); |
|||
|
|||
DESCRIPTION |
|||
|
|||
The routine glp_npp_postprocess performs postprocessing of a solution |
|||
to the resultant (preprocessed) problem instance specified by the |
|||
problem object Q and recovers corrseponding solution to the original |
|||
problem instance. The recovered solution is stored in the preprocessor |
|||
workspace and can be obtained with the routine glp_npp_obtain_sol. |
|||
|
|||
It is assumed that the resultant problem instance Q has been solved |
|||
with an appropriate solver depending on the solution type previously |
|||
passed to the routine glp_npp_load_prob (the parameter sol). Note that |
|||
only optimal or integer feasible (for MIP) solution can be recovered, |
|||
so the calling program should use the routine glp_status to make sure |
|||
that this condition is met. |
|||
------------------------------------------------------------------------ |
|||
@.@.7 glp_npp_obtain_sol - obtain solution to original problem |
|||
|
|||
SYNOPSIS |
|||
|
|||
void glp_npp_obtain_sol(glp_prep *prep, glp_prob *P); |
|||
|
|||
DESCRIPTION |
|||
|
|||
The routine glp_npp_obtain_sol copies the solution to the original |
|||
problem instance previously recovered by the routine |
|||
glp_npp_postorocess from the preprocessor workspace to the problem |
|||
object P. The effect is the same as if the solution were computed by an |
|||
appropriate solver. |
|||
------------------------------------------------------------------------ |
|||
@.@.8 glp_npp_free_wksp - free the preprocessor workspace |
|||
|
|||
SYNOPSIS |
|||
|
|||
void glp_npp_free_wksp(glp_prep *prep); |
|||
|
|||
DESCRIPTION |
|||
|
|||
The routine glp_npp_free_wksp frees all the memory allocated to the |
|||
preprocessor workspace. |
|||
|
|||
===EOF=== |
Some files were not shown because too many files changed in this diff
Reference in new issue
xxxxxxxxxx