X-Git-Url: http://git.megacz.com/?p=org.ibex.core.git;a=blobdiff_plain;f=src%2Forg%2Fibex%2Futil%2FSimplex.java;h=2ae314a246af7cafcf8c1894e3301e5d1540718c;hp=e8871ca08f1ca71a95a645cacf64bd37021eb679;hb=01732f3955ae92c0520283b44f52d1ec69f9f9f2;hpb=da0536829a719b7edf03041695173cc73951f9ef diff --git a/src/org/ibex/util/Simplex.java b/src/org/ibex/util/Simplex.java index e8871ca..2ae314a 100644 --- a/src/org/ibex/util/Simplex.java +++ b/src/org/ibex/util/Simplex.java @@ -256,9 +256,7 @@ public class Simplex { epsel=DEF_EPSEL; non_zeros=0; - for(int i = 0; i < mat_alloc; i++) { set_row_nr(mat,i, 0); set_value(mat, i, 0); } - for(int i = 0; i < mat_alloc; i++) col_no[i] = 0; - for(int i = 0; i < columns + 1; i++) col_end[i] = 0; + for(int i = 0; i < col_end.length; i++) col_end[i] = 0; for(int i = 0; i < rows + 1; i++) row_end[i] = 0; for(int i = 0; i < rows + 1; i++) orig_rh[i] = 0; for(int i = 0; i < rows + 1; i++) rh[i] = 0; @@ -272,9 +270,6 @@ public class Simplex { for(int i = 0; i <= rows; i++) { bas[i]=i; basis[i]=TRUE; } for(int i = rows + 1; i <= sum; i++) basis[i]=FALSE; for(int i = 0 ; i <= sum; i++) lower[i]=TRUE; - for(int i = 0; i < eta_alloc; i++) eta_value[i] = 0; - for(int i = 0; i < eta_alloc; i++) eta_row_nr[i] = 0; - for(int i = 0; i < rows_alloc + max_num_inv; i++) eta_col_end[i] = 0; for(int i = 0; i <= sum; i++) solution[i] = 0; for(int i = 0; i <= sum; i++) best_solution[i] = 0; for(int i = 0; i <= rows; i++) duals[i] = 0; @@ -1295,7 +1290,7 @@ public class Simplex { } public int solve() { - int result; + int result = FAILURE; if (active == FALSE) set_globals(); total_iter = 0; max_level = 1; @@ -1320,16 +1315,25 @@ public class Simplex { eta_size = Eta_size; eta_alloc = Eta_alloc; num_inv = Num_inv; - return(result); } - return(FAILURE); + for(int i = 0; i < maxmat; i++) { set_row_nr(mat,i, 0); set_value(mat, i, 0); } + for(int i = 0; i < maxmat; i++) col_no[i] = 0; + + // FIXME: not sure about this + for(int i = 0; i < Eta_size; i++) eta_value[i] = 0; + for(int i = 0; i < Eta_size; i++) eta_row_nr[i] = 0; + for(int i = 0; i < Eta_size; i++) eta_col_end[i] = 0; + + maxmat = 0; + return(result); } + private int maxmat = 0; private final static float round( float val, float eps) { return (Math.abs(val) < eps) ? 0 : val; } - static int get_row_nr(MatrixArray m, int i) { return m.row_nr[i]; } - static void set_row_nr(MatrixArray m, int i, int val) { m.row_nr[i] = val; } - static float get_value(MatrixArray m, int i) { return m.value[i]; } - static void set_value(MatrixArray m, int i, float val) { m.value[i] = val; } + int get_row_nr(MatrixArray m, int i) { return m.row_nr[i]; } + void set_row_nr(MatrixArray m, int i, int val) { m.row_nr[i] = val; maxmat = Math.max(i, maxmat); } + float get_value(MatrixArray m, int i) { return m.value[i]; } + void set_value(MatrixArray m, int i, float val) { m.value[i] = val; maxmat = Math.max(i, maxmat); } public static class MatrixArray { public int[] row_nr; public float[] value;