This is lp_solve.c in view mode; [Download] [Up]
#include <string.h>
#include <stdio.h>
#include "lpkit.h"
#include "lpglob.h"
#include "patchlevel.h"
void print_help(char *argv[])
{
printf("Usage of %s version %s:\n", argv[0], PATCHLEVEL);
printf("%s [options] \"<\" <input_file>\n", argv[0]);
printf("list of options:\n");
printf("-h\t\tprints this message\n");
printf("-v\t\tverbose mode, gives flow through the program\n");
printf("-d\t\tdebug mode, all intermediate results are printed,\n\t\tand the branch-and-bound decisions\n");
printf("-p\t\tprint the values of the dual variables\n");
printf("-b <bound>\tspecify a lower bound for the objective function\n\t\tto the program. If close enough, may speed up the\n\t\tcalculations.\n");
printf("-i\t\tprint all intermediate valid solutions.\n\t\tCan give you useful solutions even if the total run time\n\t\tis too long\n");
printf("-e <number>\tspecifies the epsilon which is used to determine whether a\n\t\tfloating point number is in fact an integer.\n\t\tShould be < 0.5\n");
printf("-c\t\tduring branch-and-bound, take the ceiling branch first\n");
printf("-s\t\tuse automatic problem scaling.\n");
printf("-I\t\tprint info after reinverting\n");
printf("-t\t\ttrace pivot selection\n");
printf("-mps\t\tread from MPS file instead of lp file\n");
printf("-degen\t\tuse perturbations to reduce degeneracy,\n\t\tcan increase numerical instability\n");
}
int main(int argc, char *argv[])
{
lprec *lp;
int i;
short verbose = FALSE;
short debug = FALSE;
short print_sol = FALSE;
short print_duals = FALSE;
short floor_first = TRUE;
short scaling = FALSE;
short print_at_invert = FALSE;
short tracing = FALSE;
short mps = FALSE;
short anti_degen = FALSE;
int result;
REAL obj_bound = (REAL)DEF_INFINITE;
REAL epsilon = (REAL)DEF_EPSILON;
for(i = 1; i < argc; i++)
{
if(strcmp(argv[i], "-v") == 0)
verbose = TRUE;
else if(strcmp(argv[i], "-d") == 0)
debug = TRUE;
else if(strcmp(argv[i], "-i") == 0)
print_sol = TRUE;
else if(strcmp(argv[i], "-c") == 0)
floor_first = FALSE;
else if(strcmp(argv[i], "-b") == 0)
obj_bound = atof(argv[++i]);
else if(strcmp(argv[i], "-e") == 0)
{
epsilon = atof(argv[++i]);
if((epsilon <= 0.0) || (epsilon >= 0.5))
{
fprintf(stderr, "Invalid epsilon %g; 0 < epsilon < 0.5\n",
(double)epsilon);
exit(1);
}
}
else if(strcmp(argv[i], "-p") == 0)
print_duals = TRUE;
else if(strcmp(argv[i], "-h") == 0)
{
print_help(argv);
exit(0);
}
else if(strcmp(argv[i], "-s") == 0)
scaling = TRUE;
else if(strcmp(argv[i], "-I") == 0)
print_at_invert=TRUE;
else if(strcmp(argv[i], "-t") == 0)
tracing=TRUE;
else if(strcmp(argv[i],"-mps") == 0)
mps=TRUE;
else if(strcmp(argv[i],"-degen") == 0)
anti_degen=TRUE;
}
if(mps)
lp = read_mps(stdin, verbose);
else
lp = read_lp_file(stdin, verbose, "lp" );
if(lp->columns < 8 && verbose)
print_lp(lp);
if(scaling)
auto_scale(lp);
if(print_sol)
lp->print_sol = TRUE;
lp->epsilon = epsilon;
if(print_duals)
lp->print_duals = TRUE;
if(debug)
lp->debug = TRUE;
if(!floor_first)
lp->floor_first = FALSE;
if(print_at_invert)
lp->print_at_invert = TRUE;
if(tracing == TRUE)
lp->trace = TRUE;
if(obj_bound != DEF_INFINITE)
lp->obj_bound = obj_bound;
lp->anti_degen = anti_degen;
if(verbose)
{
printf("Solving\n");
lp->verbose = TRUE;
}
result = solve(lp);
if(result == OPTIMAL)
{
print_solution(lp);
if(verbose)
fprintf(stderr,
"Branch & Bound depth: %d\nNodes processed: %d\nSimplex pivots: %d\n",
lp->max_level, lp->total_nodes, lp->total_iter);
}
if(result == INFEASIBLE)
printf("This problem is infeasible\n");
if(result == UNBOUNDED)
printf("This problem is unbounded\n");
if(result == FAILURE)
printf("lp_solve failed\n");
return(result);
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.