[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Help-glpk] Help needed with basis things!
From: |
HBuesching04 |
Subject: |
[Help-glpk] Help needed with basis things! |
Date: |
Thu, 01 Feb 2007 07:44:57 +0100 |
Hi,
I have made a routine, which is a prototype of a maybe needfull
function. It deals with problems where the optimal solution consists of
a subspace and not a point.
A solution within the subsoace is searched which should have more
integers as the first solution. It works fine, no problems.
But I would like to use this solution to be the actual solution in the
given problem and do other things after this, but here I get an error
message.
As I am really not an expert in basis things I would appreciate some
expertise on the subject.
Best regards
Harald.
void LP_Search_Integer(LPX *ToBeAdjusted)
{
/*prerequisite: ToBeAdjusted is already solved and all variables are
binaries! */
/*RealNumberColumns is a global */
double *obj, obj_value;
int i, j, *ind;
int toBeDeleted[2];
/*Prepare problem */
RealNumberColumns = lpx_get_num_cols(ToBeAdjusted);
Integrity_Review(ToBeAdjusted);
obj_value = lpx_get_obj_val(ToBeAdjusted);
obj = ucalloc(RealNumberColumns + 1, sizeof(double));
ind = ucalloc(RealNumberColumns + 1, sizeof(int));
for (i=1; i<=RealNumberColumns; i++)
{obj[i] = lpx_get_obj_coef(ToBeAdjusted, i);
ind[i] = i;}
/*Fix objective value*/
lpx_add_rows(ToBeAdjusted, 1);
lpx_set_mat_row(ToBeAdjusted, RealNumberRows + 1, RealNumberColumns,
ind, obj);
lpx_set_row_bnds(ToBeAdjusted, RealNumberRows + 1, LPX_FX, obj_value,
DontMatter);
/*Iterate and hereby punish the almost integers variables to become
integers*/
for (j=1; j<=5; j++)
{for (i=1; i<=RealNumberColumns; i++)
{lpx_set_obj_coef(ToBeAdjusted, i,
floor(lpx_get_col_prim(ToBeAdjusted, i)) -
lpx_get_col_prim(ToBeAdjusted, i) + 0.5);
}
lpx_simplex(ToBeAdjusted);
Integrity_Review(ToBeAdjusted);}
/*Undo change*/
for (i=1; i<=RealNumberColumns; i++)
lpx_set_obj_coef(ToBeAdjusted, i, obj[i]);
toBeDeleted[1] = RealNumberRows+1;
lpx_del_rows(ToBeAdjusted, 1, toBeDeleted);
/*This doesn't work anymore */
lpx_simplex(ToBeAdjusted);
/*error message "spx_simplex: initial basis is invalid"*/
}
- [Help-glpk] Help needed with basis things!,
HBuesching04 <=