📄 changelog
字号:
Changed after first review for comp.sources.reviewed:- Bug with row singletons and assignment fixed.- Makefile fixed.- Formatted man page (lp_solve.man) added + target to generate it in the Makefile- install signal handler after reading the input to avoid dumping core- changed names of some examples to make them uniform- added correct results for all examplesChanges since the comp.sources.reviewed release:- added more input sanity checking- removed a bug in the Branch-and-Bound code which could cause umlimited recursion and finally a core dump- removed the duplicate declaration of global variable Rows- replaced bcopy by the ANSI standard memcopy- various small cosmetic changesChanges for version 1.1- added KNOWN_BUGS file.- accept x <= 0 as a sane bound.Changes for version 1.2- added (unsupported by me) VMS_SUPPORT file- made lp_solve print the reason a problem cannot be solved (unbounded or infeasible)- added input format extension to optionally indicate whether the objective function should be minimized or maximized.- Added output(!) in real MPS format for the -v option.Changes for version 1.3- Added #ifdefs to handle the different definitions necessary for yytext on different computers. Why is there no standard???- Fixed a very nasty bug in the parser which would handle variables on the right hand side of the relational operator which had an effective negative sign wrongly (actually, the negative sign was ignored).- added -p option to print the values of the dual variables.- Added test target in Makefile to allow automatic testing with the standard examples ex[1-5].lp.- Added syntax extension for optional user specified constraint (dual) names.- Fixed bug in the combination of minimization of the objective function (min: <obj fun>) and MILP problems. Pure LP worked ok.- From now on lp_solve refuses problems with just bounds (0 real constraints). This does not work anyway.Changes for version 1.4- Various cosmetic changes to the sources- Added ex6.lp just for fun (read it!).- Added results obtained on netlib and miplib benchmark sets (thanks to mps2eq).- removed pragmas for Alliant computers (they're out of business anyway).- changed the default "double" type to REAL, which can be changed during compilation (-DREAL=float or -DREAL='long double')Changes for version 1.5- Added -scale option for global scaling of the problem.- Fixed problem with Endetacol being written out of bounds.- Added -autoscale option for automatic scaling of rows and columns.- Added ex7.lp, an example which can only be solved when scaled properly.- Added -solve_dual option to let lp_solve solve the dual of the problem it is reading. This is not a very useful option, but I needed it to check the results generated by the updated -p option (see next item). It will not work with equality constraints.- The -p option now produces real dual values, thanks to a code hint by Jeroen Dirks (jeroend@tor.numetrix.com)- The MILP branch-and-bound loop was rearranged by Jeroen Dirks resulting in significantly increased performance (2 - 10 times faster).Changes for 2.0a- Added a procedural interface (the lp toolkit).- removed -scale and -solve_dual options- renamed option -autoscale to -sChanges for 2.0b1- Added -mps option to read MPS files. And also included some mps associated functions in the toolkit.Changes for 2.0b2- Fixed bug in: delete_lp del_constraint write_MPS- added: write_LP msp2lp lp2mpsChanges for 2.0b3- Changed default integer/noninteger value to 1e-3- Added Epsb in Iteration function at minit detection (lp_solve gave infeasible for some feasible problems)- Added -degen perturbation option for degenerate problems.Changes for 2.0- Removed "Parsing" message- Made CHECK Warning output print to stderrChanges for 2.1beta- added '-time' option to print CPU times of parsing and optimization- fixed some MPS reading problems- allow empty OF in lp_solve format to get just a feasible solution- added filtering of very small pivots to improve numerical stability- fixed several bugs in lpkit.c and readmps.cChanges for 2.1- improved the speed of the MPS reader (considerably!) by introducing hash tables- fixed bug in column_in_lp- updated Jeroen Dirks' email address in the sources- added HARTMUT_DOCUMENTATION to the distributionChanges for 2.2- fixed memory leak in delete_lp- fixed some more lpkit.c bugs- got rid of the ugly global variables used in solve.c.Changes for 2.3- fixed memory problem in solve.c (eta arrays were not always realloc-ed on time).- support for RANGES in MPS reworked; should now be according to standard- option -degen could sometimes produce "results" for infeasible problems, fixed.- previous versions of lp_solve would not scale any column when integer variables were present. Now only the actual integer columns are not scaled.- copy_lp now also copies the rowname and colname hash tablesChanges for 3.0- lp_solve now has an official open source license, 3.0 and up will have the LGPL license attached.- there was a problem in write_MPS, where numbers were printed with up to 16 digits instead of the maximum of 12Changes for 3.0- Bug fix with -degen option (constants were not so constant any more)Changes for 3.1- copy name strings in copy_hash_table to avoid crashes when old lp's are freed- added call to btran at line 925 of solve.c according to an analysis by Joerg HerbersChanges for 3.1a- fixed memory management problem in read.c introduced in 3.1Changes for 3.2- fixed eta realloc problem in solve.cChanges for 4.0.0.0- Added files fortify.c, fortify.h, ufortify.h, declare.h fortify is a memory management wrapper. It redirects all memory management routines like malloc, calloc, realloc, free, ... to own routines. The purpose of this is purely for debugging. This 'library' adds leading and trailing bytes to each allocated piece of memory which makes it possible to check if no memory before or after the allocated block was written. Although this is not a perfect method of finding memory overruns, it is a big help in finding 95% of them. It also checks if all allocated memory is freeed again between a given starting and ending point. This 'library' has helped me already numerious times to easilly find and pinpoint these problems on the place and on the variable where the problem occurs and not on totally different one which is very common to this kind of problems. Use of this library is very easily. - Just include fortify.h in the source file(s) where memory allocation functions are used. - Define the constant FORTIFY- Corrected some spelling in different source files.- Removed exit functions. This change is needed when lp_solve is used as a library which is called from an application. Terminating the process is sertainly not a good idea in that case. When a severe error occurs, the called function will return exit false to indicate that a problem occured and lp->spx_status indicates what the problem is.- Modified the MALLOC, CALLOC, REALLOC functions to not exit the program if no memory could be allocated. Instead the calling functions exit with a return code FALSE to indicate there was a problem. The cller program then has to check lp->spx_status to see what the problem is. If out of memory then its value is the constant OUT_OF_MEMORY.- The lprec structure has changed considerably. This means that programs must be recompiled when they link with this new library. A couble of members are deleted, some have changed and several new members are created. Be aware of this. However the interface to the library is kept as much as possible, so recompilation should be possible without modification. One thing is to be considered however. Several routines that previously returned a void now return int to indicate if they succeeded. They can fail if there is not enough memory available. The return status should always be checked ...- The lpkit.h include file defines some constants like DEF_INFINITE, DEF_EPSB, DEF_EPSEL, DEF_EPSD, DEF_EPSILON, PREJ, ... It is now possible to overrule these defaults at compile time by defining them at that time (generally via the -D compiler option).- Some constants like DEF_EPSB, DEF_EPSD, DEF_EPSILON have now better default values. For example in the past, DEF_EPSILON was set to 0.001. This value is the tolerance to determine if a REAL is integer. This is used for integer optimization. 0.0005 was in the past accepted as an integer value. This is now changed to 1e-6- mps2lp and lp2mps now accept optionally input and output files via the command line. It is still possible to work via stdin and stdout (redirection) Usage: mps2lp [inputfile.mps [outputfile.lp]] [<inputfile.mps] [>outputfile.lp] lp2mps [inputfile.lp [outputfile.mps]] [<inputfile.lp] [>outputfile.mps]- mps2lp and lp2mps now return meaningfull exit codes 0: File converted successfully 1: Usage screen was shown 2: Unable to open input file 3: Unable to open output file 4: Unable to read mps/lp file 5: Unable to write lp/mps file- Rearranged include header files in hash.c, read.c, lpkit.c First the standard C headers are included and then own project headers. Some compilers gave warning otherwise.- Until version 3 there was no presolve implemented in lp_solve. From this version there is. The routine is implemented in presolve.c By default lp_solve does not do a presolve. Member do_presolve of the lprec structure must be set on TRUE before the solve() routine is called to do a presolve. Presolve can do the following operations: - remove empty rows - remove empty columns - convert rows with only 1 coefficient on a variable to a bound A presolve can make the lp problem smaller so that solution time is shorter.- Debugging/tracing routines in debug.c were always printing results to stderr.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -