[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug-glpk] 1e-0 vs. 1e+0
From: |
Frank Eschmann |
Subject: |
[Bug-glpk] 1e-0 vs. 1e+0 |
Date: |
Fri, 21 Mar 2003 11:11:18 +0100 |
User-agent: |
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20021130 |
Hi,
I formulated a scheduling problem for a special computer architecture in
GLPK/L. I am using glpsol 3.2.4.
After a few bug fixes in my formulation I tried a little larger problem
-- and got a wrong solution. So I constrained the variables to the
values I expected, and I couldn't found a violation of the dependencies,
though glpsol says, that there is no feasible solution, even for the
nomip problem.
So I expanded the output of glpsol a little bit, that I get information
which constraints are violated (maybe a good idea for a next version...
:o) ) and the exact values of activity and the bounds -- my changes are
also attached.
With that I found that the problems arise at following constraints:
2676 mf_only_one_site[m1]
B 1 1 =
fx: vx=1.000000e-00, lb=1.000000e+00
2677 mf_only_one_site[m2]
B 1 1 =
fx: vx=1.000000e-00, lb=1.000000e+00
[...]
2679 mf_only_one_site[m4]
B 1 1 =
fx: vx=1.000000e-00, lb=1.000000e+00
The constraint is obviously fullfilled, but because of the exponent they
are identified as not identically.
Could this be the reason, why glpsol says, the solution is infeasible?
Thanks a lot for any help,
Frank Eschmann
--
Dipl.-Inform. Frank Eschmann
Johann Wolfgang Goethe-Universität
Professur für Technische Informatik
Robert-Mayer-Straße 11-15, 60054 Frankfurt
Zi: 213 Tel: 069-798-28242 Fax: 069-798-22351
email: address@hidden
/*-----------------------------------------------------------------*/
/* Beschreibung des optimalen globalen Schedulings fuer SDAARC als */
/* ganzzahliges lineares Programm. */
/* */
/* Autor: Frank Eschmann <address@hidden> */
/* Datum: 21.02.2003 */
/* */
/* Grundlage: Bericht "Berechnung eines optimalen Schedulings */
/* fuer SDAARC mittels Ganzzahliger Linearer */
/* Programmierung" (F. Eschmann und J. Haase) */
/* */
/*
$Header:
/home/ti/atools/cvsroot/SDAARC_intern/Projekte/Scheduling/globales_Scheduling/ILP-Formulierung/GLPK-Beschreibung/SDAARC-Scheduling.lpm,v
1.4 2003/02/27 10:28:13 eschmann Exp $
*/
/* */
/* Format: GLPK/L */
/* */
/* zur Benutzung mit glpk */
/*-----------------------------------------------------------------*/
model SDAARC_Scheduling;
/*-----------------------------------------------------------------*/
/* Beschreibung der Zeitrahmens */
/*-----------------------------------------------------------------*/
set Time /* Zeitpunkte */ =
( t01, t02, t03, t04, t05, t06, t07, t08, t09, t10, t11, t12, t13, t14, t15
);
/*
( t01, t02, t03, t04, t05, t06, t07, t08, t09, t10,
t11, t12, t13, t14, t15, t16, t17, t18, t19, t20,
t21, t22, t23, t24, t25, t26, t27, t28, t29, t30,
t31, t32, t33, t34, t35, t36, t37, t38, t39, t40,
t41, t42, t43, t44, t45, t46, t47, t48, t49, t50 );
*/
parameter T; /* Anzahl der maximal notwendigen Takte */
parameter t_count[Time];
t_count[t] := 1;
T := sum(t, t_count[t]);
parameter t_ord[Time]; /* Ordnung auf der Zeitskala */
t_ord[t] := data(t in Time:
t01 1
t02 2
t03 3
t04 4
t05 5
t06 6
t07 7
t08 8
t09 9
t10 10
t11 11
t12 12
t13 13
t14 14
t15 15
);
/*
t01 1
t02 2
t03 3
t04 4
t05 5
t06 6
t07 7
t08 8
t09 9
t10 10
t11 11
t12 12
t13 13
t14 14
t15 15
t16 16
t17 17
t18 18
t19 19
t20 20
t21 21
t22 22
t23 23
t24 24
t25 25
t26 26
t27 27
t28 28
t29 29
t30 30
t31 31
t32 32
t33 33
t34 34
t35 35
t36 36
t37 37
t38 38
t39 39
t40 40
t41 41
t42 42
t43 43
t44 44
t45 45
t46 46
t47 47
t48 48
t49 49
t50 50 );
*/
predicate t_leq[Time, Time];
t_leq[t,u] := t_ord[t]-t_ord[u] <= 0;
/*-----------------------------------------------------------------*/
/* Beschreibung der Rechner */
/*-----------------------------------------------------------------*/
set Sites /* teilnehmende Rechner */ =
( s1, s2 );
/*
( s1, s2, s3, s4, s5);
*/
parameter S; /* Anzahl der teilnehmenden Rechner */
parameter s_count[Sites];
s_count[t] := 1;
S := sum(s, s_count[s]);
parameter CPI[Sites]; /* Geschwindigkeit der Rechner */
CPI[s] := data(s in Sites:
s1 1.0
s2 1.0 );
/*
s1 0.5
s2 0.3
s3 1.0
s4 0.2
s5 0.7);
*7
/*-----------------------------------------------------------------*/
/* Beschreibung der Netzwerkverbindung */
/*-----------------------------------------------------------------*/
parameter NL[Sites,Sites]; /* Netzwerk-Latenz */
/* ACHTUNG: Auf Einhaltung der Dreiecks-Ungleichung achten! */
NL[i,j] := table(i in Sites, j in Sites:
s1 s2:
s1 0 1
s2 1 0 );
/*
s1 s2 s3 s4 s5:
s1 0 2 1 2 2
s2 2 0 1 2 4
s3 4 1 0 3 2
s4 3 2 1 0 1
s5 1 2 3 1 0 );
*/
/*-----------------------------------------------------------------*/
/* Beschreibung der Microframes */
/*-----------------------------------------------------------------*/
set Microframes =
( m1, m2, m3, m4 );
/*
(m1, m2, m3, m4, m5, m6, m7, m8, m9, m10);
*/
parameter INSTR[Microframes]; /* Instruktionsanzahl der Microframes */
INSTR[m] := data(m in Microframes:
m1 3
m2 3
m3 5
m4 3 );
/*
m1 10
m2 20
m3 5
m4 50
m5 30
m6 35
m7 40
m8 70
m9 20
m10 10 );
*/
/* 1 <-> die Zeit zwischen z und t ist gleich NL[r,s] */
/* wird gebraucht um die Zeitverschiebungen in den Summen zu implementieren. */
/* es gilt dann: Pos[m,r,t-NL[r,s]] <--> Pos[m,r,z] where t_NL_1[t,z,r,s] */
predicate t_NL_1[Time, Time, Sites, Sites];
t_NL_1[t,z,r,s] := t_ord[t] - t_ord[z] - (NL[r,s] + 1) = 0;
/*-----------------------------------------------------------------*/
/* Beschreibung der Allokations-Abhängigkeiten */
/*-----------------------------------------------------------------*/
parameter ALLOK[Microframes, Microframes]; /* MF-Allokation */
/* ACHTUNG: Jeder Microframe darf nur einmal allokiert werden, */
/* d.h. pro Spalte darf nur eine 1 stehen. */
ALLOK[m,n] := table(m in Microframes, n in Microframes:
m1 m2 m3 m4:
m1 0 1 1 1
m2 0 0 0 0
m3 0 0 0 0
m4 0 0 0 0 );
/*
m1 m2 m3 m4 m5 m6 m7 m8 m9 m10:
m1 0 1 1 1 0 0 0 0 1 1
m2 0 0 0 0 0 0 0 0 0 0
m3 0 0 0 0 0 0 0 0 0 0
m4 0 0 0 0 1 1 1 0 0 0
m5 0 0 0 0 0 0 0 1 0 0
m6 0 0 0 0 0 0 0 0 0 0
m7 0 0 0 0 0 0 0 0 0 0
m8 0 0 0 0 0 0 0 0 0 0
m9 0 0 0 0 0 0 0 0 0 0
m10 0 0 0 0 0 0 0 0 0 0 );
*/
parameter NOALLOK[Microframes]; /* MFs, die nicht allokiert werden */
NOALLOK[m] := 1 - sum(l, ALLOK[l,m]);
/*-----------------------------------------------------------------*/
/* Beschreibung der Daten-Abhängigkeiten */
/*-----------------------------------------------------------------*/
parameter DEP[Microframes, Microframes];
DEP[m,n] := table(m in Microframes, n in Microframes:
m1 m2 m3 m4:
m1 0 1 1 0
m2 0 0 0 1
m3 0 0 0 1
m4 0 0 0 0 );
/*
m1 m2 m3 m4 m5 m6 m7 m8 m9 m10:
m1 0 1 1 0 0 0 0 0 0 0
m2 0 0 0 0 0 0 0 0 0 1
m3 0 0 0 1 0 0 0 0 0 0
m4 0 0 0 0 1 1 0 0 0 0
m5 0 0 0 0 0 0 0 1 0 0
m6 0 0 0 0 0 0 0 0 0 1
m7 0 0 0 0 0 0 0 0 0 1
m8 0 0 0 0 0 0 0 0 1 0
m9 0 0 0 0 0 0 0 0 0 1
m10 0 0 0 0 0 0 0 0 0 0 );
*/
/* Microframes, die keine Daten verschicken, sind End-Microframes */
predicate NOBODY_DEPENDS_ON[Microframes];
NOBODY_DEPENDS_ON[m] := sum(n, DEP[m,n]) = 0;
/*
display (NOALLOK[m]),(NOBODY_DEPENDS_ON[m]);
*/
/*-----------------------------------------------------------------*/
/* Ausführungszeitraum und -Bedingungen der Microframes */
/*-----------------------------------------------------------------*/
binary variable Exec[Microframes, Sites, Time]; /* Ausführungszeitraum und
-ort der MF */
binary variable ExecSite[Microframes, Sites]; /* Site auf der der MF ausgeführt
wird */
/* Microframes dürfen nur auf einer Site ausgeführt werden */
constraint mf_only_one_site[Microframes];
mf_only_one_site[m] := sum(s, ExecSite[m,s]) = 1;
/* Microframes müssen komplett ausgeführt werden */
constraint mf_complete_execution_1[Microframes, Sites];
mf_complete_execution_1[m,s] := sum(t, Exec[m,s,t]) >=
ExecSite[m,s]*CPI[s]*INSTR[m];
constraint mf_complete_execution_2[Microframes, Sites];
mf_complete_execution_2[m,s] := sum(t, Exec[m,s,t]) <=
ExecSite[m,s]*CPI[s]*INSTR[m] + 1;
/* ein "<" geht leider nicht */
/* pro Site und Zeitpunkt darf nur ein MF ausgeführt werden */
constraint mf_only_one_per_time[Sites, Time];
mf_only_one_per_time[s,t] := sum(m, Exec[m,s,t]) <= 1;
/*-----------------------------------------------------------------*/
/* Start- und Endzeitpunkt der Microframe-Ausführung */
/*-----------------------------------------------------------------*/
binary variable StartExec[Microframes, Time];
binary variable EndExec[Microframes, Time];
/* es muss genau einen Start- und Endzeitpunkt pro MF geben */
constraint mf_only_one_start[Microframes];
constraint mf_only_one_end[Microframes];
mf_only_one_start[m] := sum(t, StartExec[m,t]) = 1;
mf_only_one_end[m] := sum(t, EndExec[m,t]) = 1;
/* vor dem Startzeitpunkt darf der MF noch nicht ausgeführt werden */
constraint mf_no_work_before_start[Microframes, Time];
mf_no_work_before_start[m,t] := T*sum(z, StartExec[m,z] where t_leq[z,t]) >=
sum((z,s), Exec[m,s,z] where t_leq[z,t]);
/* nach dem Endzeitpunkt darf der MF nicht mehr ausgeführt werden */
constraint mf_no_work_after_end[Microframes, Time];
mf_no_work_after_end[m,t] := T*sum(z, EndExec[m,z] where t_leq[t,z]) >=
sum((z,s), Exec[m,s,z] where t_leq[t,z]);
/* zum Startzeitpunkt muss der MF schon ausgeführt werden */
constraint mf_start_at_start[Microframes, Time];
mf_start_at_start[m,t] := StartExec[m,t] <= sum(s, Exec[m,s,t]);
/* zum Endzeitpunkt muss der MF noch ausgeführt werden */
constraint mf_end_at_end[Microframes, Time];
mf_end_at_end[m,t] := EndExec[m,t] <= sum(s, Exec[m,s,t]);
/*-----------------------------------------------------------------*/
/* Position der Microframes */
/*-----------------------------------------------------------------*/
binary variable Pos[Microframes, Sites, Time];
/* 1 <-> MF befindet sich aktuell auf dieser Site */
binary variable Mig[Microframes, Time];
/* 1 <-> MF migriert gerade */
/* während der Ausführung muss der MF auf dem ausführenden Rechner liegen */
constraint mf_pos_while_execution[Microframes, Sites, Time];
mf_pos_while_execution[m,s,t] := Exec[m,s,t] <= Pos[m,s,t];
/* obere Schranke für Existenzzeitraum-Bestimmung */
constraint mf_exist_upper_limit[Microframes, Time];
mf_exist_upper_limit[m,t] := sum(s, Pos[m,s,t])+Mig[m,t] <= 1;
/* Existenzzeitraum-Bestimmung, Fall 1 */
constraint mf_exist_case_1[Microframes, Time];
mf_exist_case_1[m,t] := sum(s, Pos[m,s,t])+Mig[m,t] >=
sum((l,z), ALLOK[l,m]*EndExec[l,z] where t_leq[z,t]) +
NOALLOK[m] + sum(z, EndExec[m,z] where t_leq[t,z]) -
1;
/* Existenzzeitraum-Bestimmung, Fall 2 */
constraint mf_exist_case_2a[Microframes, Time];
mf_exist_case_2a[m,t] := sum(s, Pos[m,s,t])+Mig[m,t] <=
sum((l,z), ALLOK[l,m]*EndExec[l,z] where t_leq[z,t]) +
NOALLOK[m];
constraint mf_exist_case_2b[Microframes, Time];
mf_exist_case_2b[m,t] := sum(s, Pos[m,s,t])+Mig[m,t] <=
sum(z, EndExec[m,z] where t_leq[t,z]);
/* alle Nicht-allokierten MFs zum Startzeitpunkt auf Site 1 zwingen */
Pos.fx[m,#s1,#t01] := NOALLOK[m];
/* das funktioniert so nicht, dann soll der Solver es sich halt selbst
ausrechnen...
Pos.fx[m,s,#t01] where (s!=#s1) := 0;
*/
/* Allokation findet auf der Site des allokierenden MF statt */
constraint mf_allok_site_1[Microframes, Microframes, Sites, Time];
mf_allok_site_1[l,m,s,t] := Pos[m,s,t] <=
Pos[l,s,t] + (1 - ALLOK[l,m]*EndExec[l,t]);
constraint mf_allok_site_2[Microframes, Microframes, Sites, Time];
mf_allok_site_2[l,m,s,t] := Pos[m,s,t] >=
Pos[l,s,t] - (1 - ALLOK[l,m]*EndExec[l,t]);
/*-----------------------------------------------------------------*/
/* Migration von Microframes */
/*-----------------------------------------------------------------*/
constraint mf_mig_pos_1[Microframes, Sites, Time];
mf_mig_pos_1[m,s,t] where t_ord[t]>=2 := sum((r,z), Pos[m,r,z] where
t_NL_1[t,z,r,s]) +
sum(l, ALLOK[l,m]*EndExec[l,t]) >=
Pos[m,s,t];
constraint mf_mig_pos_2[Microframes, Sites, Time];
mf_mig_pos_2[m,s,t] where t_ord[t]>=2 := sum((r,z), Pos[m,r,z] where
t_NL_1[t,z,r,s]]) +
sum(l, ALLOK[l,m]*EndExec[l,t]) <=
S - (S-1)*Pos[m,s,t];
constraint mf_mig_neg[Microframes, Sites, Time];
mf_mig_neg[m,s,t] := sum((r,z), Pos[m,r,z]
where (t_ord[t]-NL[r,s]-t_ord[z]<=0 and
t_ord[t]-1-t_ord[z]>=0))
<= (1-Pos[m,s,t])*S*T;
/*-----------------------------------------------------------------*/
/* Verschickung der Argumente */
/*-----------------------------------------------------------------*/
/* 1 <-> Argument befindet sich gerade auf dieser Site */
binary variable ArgPos[m in Microframes, n in Microframes, s in Sites, t in
Time]
where
DEP[m,n]=1;
binary variable ArgMig[m in Microframes, n in Microframes, t in Time] where
DEP[m,n]=1;
/* Existenzzeitraum der Argumente */
constraint arg_exist[Microframes, Microframes, Time];
arg_exist[m,n,t] where DEP[m,n]=1 := DEP[m,n]*(sum(z, EndExec[m,z] where
t_leq[z,t])
-sum(z, StartExec[n,z-1] where
t_leq[z,t])) =
sum(s, ArgPos[m,n,s,t]+ArgMig[m,n,t]);
/* Argument muss sein Leben auf der erzeugenden Site starten */
constraint arg_start_site_1[Microframes, Microframes, Sites, Time];
arg_start_site_1[m,n,s,t] where DEP[m,n]=1 := ArgPos[m,n,s,t] <=
Pos[m,s,t] + (1-EndExec[m,t]);
constraint arg_start_site_2[Microframes, Microframes, Sites, Time];
arg_start_site_2[m,n,s,t] where DEP[m,n]=1 := ArgPos[m,n,s,t] >=
Pos[m,s,t] - (1-EndExec[m,t]);
/* Argument muss sein Leben auf der konsumierenden Site beenden */
constraint arg_end_site_1[Microframes, Microframes, Sites, Time];
arg_end_site_1[m,n,s,t] where DEP[m,n]=1 := ArgPos[m,n,s,t] <=
Pos[n,s,t] + (1-StartExec[n,t]);
constraint arg_end_site_2[Microframes, Microframes, Sites, Time];
arg_end_site_2[m,n,s,t] where DEP[m,n]=1 := ArgPos[m,n,s,t] >=
Pos[n,s,t] - (1-StartExec[n,t]);
/*-----------------------------------------------------------------*/
/* Migration von Argumenten */
/*-----------------------------------------------------------------*/
constraint arg_mig_neg[Microframes, Microframes, Sites, Time];
/*
arg_mig_neg[m,n,s,t] where DEP[m,n]=1 := sum((r,z), ArgPos[m,n,r,z]
where (t_ord[t]-NL[r,s]-t_ord[z] <= 0 and
t_ord[t]-1-t_ord[z]>=0))
<= (1-ArgPos[m,n,s,t])*S*T;
*/
arg_mig_neg[m,n,s,t] where DEP[m,n]=1 := sum((r,z), ArgPos[m,n,r,z]
where (t_ord[t]-NL[r,s]-t_ord[z] <= 0 and
t_ord[t]-1-t_ord[z]>=0))
- (1-ArgPos[m,n,s,t])*S*T -1 <= -1;
/*
display (arg_end_site_1[m,n,s,t]), (arg_mig_neg[m,n,s,t]);
*/
constraint arg_mig_pos_1[Microframes, Microframes, Sites, Time];
arg_mig_pos_1[m,n,s,t] where DEP[m,n]=1 := sum((r,z), ArgPos[m,n,r,z] where
t_NL_1[t,z,r,s]) +
EndExec[m,t] >=
ArgPos[m,n,s,t];
constraint arg_mig_pos_2[Microframes, Microframes, Sites, Time];
arg_mig_pos_2[m,n,s,t] where DEP[m,n]=1 := sum((r,z), ArgPos[m,n,r,z] where
t_NL_1[t,z,r,s]) +
EndExec[m,t] <=
S - (S-1)*ArgPos[m,n,s,t];
/*-----------------------------------------------------------------*/
/* Das Optimierungsziel */
/*-----------------------------------------------------------------*/
constraint execution_time;
execution_time := sum((m,t), t_ord[t]*EndExec[m,t] where NOBODY_DEPENDS_ON[m]);
minimize execution_time;
/*-----------------------------------------------------------------*/
/* Fixierung von Variablen zu Test-Zwecken */
/*-----------------------------------------------------------------*/
ExecSite.fx[#m1, #s1] := 1;
ExecSite.fx[#m1, #s2] := 0;
ExecSite.fx[#m2, #s2] := 1;
ExecSite.fx[#m2, #s1] := 0;
ExecSite.fx[#m3, #s1] := 1;
ExecSite.fx[#m3, #s2] := 0;
ExecSite.fx[#m4, #s1] := 1;
ExecSite.fx[#m4, #s2] := 0;
StartExec.fx[#m1, #t01] := 1;
StartExec.fx[#m1, #t02] := 0;
StartExec.fx[#m1, #t03] := 0;
StartExec.fx[#m1, #t04] := 0;
StartExec.fx[#m1, #t05] := 0;
StartExec.fx[#m1, #t06] := 0;
StartExec.fx[#m1, #t07] := 0;
StartExec.fx[#m1, #t08] := 0;
StartExec.fx[#m1, #t09] := 0;
StartExec.fx[#m1, #t10] := 0;
StartExec.fx[#m1, #t11] := 0;
StartExec.fx[#m1, #t12] := 0;
StartExec.fx[#m1, #t13] := 0;
StartExec.fx[#m1, #t14] := 0;
StartExec.fx[#m1, #t15] := 0;
StartExec.fx[#m2, #t05] := 1;
StartExec.fx[#m2, #t01] := 0;
StartExec.fx[#m2, #t02] := 0;
StartExec.fx[#m2, #t03] := 0;
StartExec.fx[#m2, #t04] := 0;
StartExec.fx[#m2, #t06] := 0;
StartExec.fx[#m2, #t07] := 0;
StartExec.fx[#m2, #t08] := 0;
StartExec.fx[#m2, #t09] := 0;
StartExec.fx[#m2, #t10] := 0;
StartExec.fx[#m2, #t11] := 0;
StartExec.fx[#m2, #t12] := 0;
StartExec.fx[#m2, #t13] := 0;
StartExec.fx[#m2, #t14] := 0;
StartExec.fx[#m2, #t15] := 0;
StartExec.fx[#m3, #t04] := 1;
StartExec.fx[#m3, #t01] := 0;
StartExec.fx[#m3, #t02] := 0;
StartExec.fx[#m3, #t03] := 0;
StartExec.fx[#m3, #t05] := 0;
StartExec.fx[#m3, #t06] := 0;
StartExec.fx[#m3, #t07] := 0;
StartExec.fx[#m3, #t08] := 0;
StartExec.fx[#m3, #t09] := 0;
StartExec.fx[#m3, #t10] := 0;
StartExec.fx[#m3, #t11] := 0;
StartExec.fx[#m3, #t12] := 0;
StartExec.fx[#m3, #t13] := 0;
StartExec.fx[#m3, #t14] := 0;
StartExec.fx[#m3, #t15] := 0;
StartExec.fx[#m4, #t09] := 1;
StartExec.fx[#m4, #t01] := 0;
StartExec.fx[#m4, #t02] := 0;
StartExec.fx[#m4, #t03] := 0;
StartExec.fx[#m4, #t04] := 0;
StartExec.fx[#m4, #t05] := 0;
StartExec.fx[#m4, #t06] := 0;
StartExec.fx[#m4, #t07] := 0;
StartExec.fx[#m4, #t08] := 0;
StartExec.fx[#m4, #t10] := 0;
StartExec.fx[#m4, #t11] := 0;
StartExec.fx[#m4, #t12] := 0;
StartExec.fx[#m4, #t13] := 0;
StartExec.fx[#m4, #t14] := 0;
StartExec.fx[#m4, #t15] := 0;
EndExec.fx[#m1, #t03] := 1;
EndExec.fx[#m1, #t01] := 0;
EndExec.fx[#m1, #t02] := 0;
EndExec.fx[#m1, #t04] := 0;
EndExec.fx[#m1, #t05] := 0;
EndExec.fx[#m1, #t06] := 0;
EndExec.fx[#m1, #t07] := 0;
EndExec.fx[#m1, #t08] := 0;
EndExec.fx[#m1, #t09] := 0;
EndExec.fx[#m1, #t10] := 0;
EndExec.fx[#m1, #t11] := 0;
EndExec.fx[#m1, #t12] := 0;
EndExec.fx[#m1, #t13] := 0;
EndExec.fx[#m1, #t14] := 0;
EndExec.fx[#m1, #t15] := 0;
EndExec.fx[#m2, #t07] := 1;
EndExec.fx[#m2, #t01] := 0;
EndExec.fx[#m2, #t02] := 0;
EndExec.fx[#m2, #t03] := 0;
EndExec.fx[#m2, #t04] := 0;
EndExec.fx[#m2, #t05] := 0;
EndExec.fx[#m2, #t06] := 0;
EndExec.fx[#m2, #t08] := 0;
EndExec.fx[#m2, #t09] := 0;
EndExec.fx[#m2, #t10] := 0;
EndExec.fx[#m2, #t11] := 0;
EndExec.fx[#m2, #t12] := 0;
EndExec.fx[#m2, #t13] := 0;
EndExec.fx[#m2, #t14] := 0;
EndExec.fx[#m2, #t15] := 0;
EndExec.fx[#m3, #t08] := 1;
EndExec.fx[#m3, #t01] := 0;
EndExec.fx[#m3, #t02] := 0;
EndExec.fx[#m3, #t03] := 0;
EndExec.fx[#m3, #t04] := 0;
EndExec.fx[#m3, #t05] := 0;
EndExec.fx[#m3, #t06] := 0;
EndExec.fx[#m3, #t07] := 0;
EndExec.fx[#m3, #t09] := 0;
EndExec.fx[#m3, #t10] := 0;
EndExec.fx[#m3, #t11] := 0;
EndExec.fx[#m3, #t12] := 0;
EndExec.fx[#m3, #t13] := 0;
EndExec.fx[#m3, #t14] := 0;
EndExec.fx[#m3, #t15] := 0;
EndExec.fx[#m4, #t11] := 1;
EndExec.fx[#m4, #t01] := 0;
EndExec.fx[#m4, #t02] := 0;
EndExec.fx[#m4, #t03] := 0;
EndExec.fx[#m4, #t04] := 0;
EndExec.fx[#m4, #t05] := 0;
EndExec.fx[#m4, #t06] := 0;
EndExec.fx[#m4, #t07] := 0;
EndExec.fx[#m4, #t08] := 0;
EndExec.fx[#m4, #t09] := 0;
EndExec.fx[#m4, #t10] := 0;
EndExec.fx[#m4, #t12] := 0;
EndExec.fx[#m4, #t13] := 0;
EndExec.fx[#m4, #t14] := 0;
EndExec.fx[#m4, #t15] := 0;
Exec.fx[#m1, #s1, #t01] := 1;
Exec.fx[#m1, #s1, #t02] := 1;
Exec.fx[#m1, #s1, #t03] := 1;
Exec.fx[#m1, #s1, #t04] := 0;
Exec.fx[#m1, #s1, #t05] := 0;
Exec.fx[#m1, #s1, #t06] := 0;
Exec.fx[#m1, #s1, #t07] := 0;
Exec.fx[#m1, #s1, #t08] := 0;
Exec.fx[#m1, #s1, #t09] := 0;
Exec.fx[#m1, #s1, #t10] := 0;
Exec.fx[#m1, #s1, #t11] := 0;
Exec.fx[#m1, #s1, #t12] := 0;
Exec.fx[#m1, #s1, #t13] := 0;
Exec.fx[#m1, #s1, #t14] := 0;
Exec.fx[#m1, #s1, #t15] := 0;
Exec.fx[#m1, #s2, t] := 0;
Exec.fx[#m2, #s2, #t01] := 0;
Exec.fx[#m2, #s2, #t02] := 0;
Exec.fx[#m2, #s2, #t03] := 0;
Exec.fx[#m2, #s2, #t04] := 0;
Exec.fx[#m2, #s2, #t05] := 1;
Exec.fx[#m2, #s2, #t06] := 1;
Exec.fx[#m2, #s2, #t07] := 1;
Exec.fx[#m2, #s2, #t08] := 0;
Exec.fx[#m2, #s2, #t09] := 0;
Exec.fx[#m2, #s2, #t10] := 0;
Exec.fx[#m2, #s2, #t11] := 0;
Exec.fx[#m2, #s2, #t12] := 0;
Exec.fx[#m2, #s2, #t13] := 0;
Exec.fx[#m2, #s2, #t14] := 0;
Exec.fx[#m2, #s2, #t15] := 0;
Exec.fx[#m2, #s1, t] := 0;
Exec.fx[#m3, #s1, #t01] := 0;
Exec.fx[#m3, #s1, #t02] := 0;
Exec.fx[#m3, #s1, #t03] := 0;
Exec.fx[#m3, #s1, #t04] := 1;
Exec.fx[#m3, #s1, #t05] := 1;
Exec.fx[#m3, #s1, #t06] := 1;
Exec.fx[#m3, #s1, #t07] := 1;
Exec.fx[#m3, #s1, #t08] := 1;
Exec.fx[#m3, #s1, #t09] := 0;
Exec.fx[#m3, #s1, #t10] := 0;
Exec.fx[#m3, #s1, #t11] := 0;
Exec.fx[#m3, #s1, #t12] := 0;
Exec.fx[#m3, #s1, #t13] := 0;
Exec.fx[#m3, #s1, #t14] := 0;
Exec.fx[#m3, #s1, #t15] := 0;
Exec.fx[#m3, #s2, t] := 0;
Exec.fx[#m4, #s1, #t01] := 0;
Exec.fx[#m4, #s1, #t02] := 0;
Exec.fx[#m4, #s1, #t03] := 0;
Exec.fx[#m4, #s1, #t04] := 0;
Exec.fx[#m4, #s1, #t05] := 0;
Exec.fx[#m4, #s1, #t06] := 0;
Exec.fx[#m4, #s1, #t07] := 0;
Exec.fx[#m4, #s1, #t08] := 0;
Exec.fx[#m4, #s1, #t09] := 1;
Exec.fx[#m4, #s1, #t10] := 1;
Exec.fx[#m4, #s1, #t11] := 1;
Exec.fx[#m4, #s1, #t12] := 0;
Exec.fx[#m4, #s1, #t13] := 0;
Exec.fx[#m4, #s1, #t14] := 0;
Exec.fx[#m4, #s1, #t15] := 0;
Exec.fx[#m4, #s2, t] := 0;
Pos.fx[#m1, #s1, #t01] := 1;
Pos.fx[#m1, #s1, #t02] := 1;
Pos.fx[#m1, #s1, #t03] := 1;
Pos.fx[#m1, #s1, #t04] := 0;
Pos.fx[#m1, #s1, #t05] := 0;
Pos.fx[#m1, #s1, #t06] := 0;
Pos.fx[#m1, #s1, #t07] := 0;
Pos.fx[#m1, #s1, #t08] := 0;
Pos.fx[#m1, #s1, #t09] := 0;
Pos.fx[#m1, #s1, #t10] := 0;
Pos.fx[#m1, #s1, #t11] := 0;
Pos.fx[#m1, #s1, #t12] := 0;
Pos.fx[#m1, #s1, #t13] := 0;
Pos.fx[#m1, #s1, #t14] := 0;
Pos.fx[#m1, #s1, #t15] := 0;
Pos.fx[#m1, #s2, t] := 0;
Mig.fx[#m1, t] := 0;
Pos.fx[#m2, #s1, #t01] := 0;
Pos.fx[#m2, #s1, #t02] := 0;
Pos.fx[#m2, #s1, #t03] := 1;
Pos.fx[#m2, #s1, #t04] := 0;
Pos.fx[#m2, #s1, #t05] := 0;
Pos.fx[#m2, #s1, #t06] := 0;
Pos.fx[#m2, #s1, #t07] := 0;
Pos.fx[#m2, #s1, #t08] := 0;
Pos.fx[#m2, #s1, #t09] := 0;
Pos.fx[#m2, #s1, #t10] := 0;
Pos.fx[#m2, #s1, #t11] := 0;
Pos.fx[#m2, #s1, #t12] := 0;
Pos.fx[#m2, #s1, #t13] := 0;
Pos.fx[#m2, #s1, #t14] := 0;
Pos.fx[#m2, #s1, #t15] := 0;
Pos.fx[#m2, #s2, #t01] := 0;
Pos.fx[#m2, #s2, #t02] := 0;
Pos.fx[#m2, #s2, #t03] := 0;
Pos.fx[#m2, #s2, #t04] := 0;
Pos.fx[#m2, #s2, #t05] := 1;
Pos.fx[#m2, #s2, #t06] := 1;
Pos.fx[#m2, #s2, #t07] := 1;
Pos.fx[#m2, #s2, #t08] := 0;
Pos.fx[#m2, #s2, #t09] := 0;
Pos.fx[#m2, #s2, #t10] := 0;
Pos.fx[#m2, #s2, #t11] := 0;
Pos.fx[#m2, #s2, #t12] := 0;
Pos.fx[#m2, #s2, #t13] := 0;
Pos.fx[#m2, #s2, #t14] := 0;
Pos.fx[#m2, #s2, #t15] := 0;
Mig.fx[#m2, #t01] := 0;
Mig.fx[#m2, #t02] := 0;
Mig.fx[#m2, #t03] := 0;
Mig.fx[#m2, #t04] := 1;
Mig.fx[#m2, #t05] := 0;
Mig.fx[#m2, #t06] := 0;
Mig.fx[#m2, #t07] := 0;
Mig.fx[#m2, #t08] := 0;
Mig.fx[#m2, #t09] := 0;
Mig.fx[#m2, #t10] := 0;
Mig.fx[#m2, #t11] := 0;
Mig.fx[#m2, #t12] := 0;
Mig.fx[#m2, #t13] := 0;
Mig.fx[#m2, #t14] := 0;
Mig.fx[#m2, #t15] := 0;
Pos.fx[#m3, #s1, #t01] := 0;
Pos.fx[#m3, #s1, #t02] := 0;
Pos.fx[#m3, #s1, #t03] := 1;
Pos.fx[#m3, #s1, #t04] := 1;
Pos.fx[#m3, #s1, #t05] := 1;
Pos.fx[#m3, #s1, #t06] := 1;
Pos.fx[#m3, #s1, #t07] := 1;
Pos.fx[#m3, #s1, #t08] := 1;
Pos.fx[#m3, #s1, #t09] := 0;
Pos.fx[#m3, #s1, #t10] := 0;
Pos.fx[#m3, #s1, #t11] := 0;
Pos.fx[#m3, #s1, #t12] := 0;
Pos.fx[#m3, #s1, #t13] := 0;
Pos.fx[#m3, #s1, #t14] := 0;
Pos.fx[#m3, #s1, #t15] := 0;
Pos.fx[#m3, #s2, t] := 0;
Mig.fx[#m3, t] := 0;
Pos.fx[#m4, #s1, #t01] := 0;
Pos.fx[#m4, #s1, #t02] := 0;
Pos.fx[#m4, #s1, #t03] := 1;
Pos.fx[#m4, #s1, #t04] := 1;
Pos.fx[#m4, #s1, #t05] := 1;
Pos.fx[#m4, #s1, #t06] := 1;
Pos.fx[#m4, #s1, #t07] := 1;
Pos.fx[#m4, #s1, #t08] := 1;
Pos.fx[#m4, #s1, #t09] := 1;
Pos.fx[#m4, #s1, #t10] := 1;
Pos.fx[#m4, #s1, #t11] := 1;
Pos.fx[#m4, #s1, #t12] := 0;
Pos.fx[#m4, #s1, #t13] := 0;
Pos.fx[#m4, #s1, #t14] := 0;
Pos.fx[#m4, #s1, #t15] := 0;
Pos.fx[#m4, #s2, t] := 0;
Mig.fx[#m4, t] := 0;
ArgPos.fx[#m1, #m2, #s1, #t01] := 0;
ArgPos.fx[#m1, #m2, #s1, #t02] := 0;
ArgPos.fx[#m1, #m2, #s1, #t03] := 1;
ArgPos.fx[#m1, #m2, #s1, #t04] := 0;
ArgPos.fx[#m1, #m2, #s1, #t05] := 0;
ArgPos.fx[#m1, #m2, #s1, #t06] := 0;
ArgPos.fx[#m1, #m2, #s1, #t07] := 0;
ArgPos.fx[#m1, #m2, #s1, #t08] := 0;
ArgPos.fx[#m1, #m2, #s1, #t09] := 0;
ArgPos.fx[#m1, #m2, #s1, #t10] := 0;
ArgPos.fx[#m1, #m2, #s1, #t11] := 0;
ArgPos.fx[#m1, #m2, #s1, #t12] := 0;
ArgPos.fx[#m1, #m2, #s1, #t13] := 0;
ArgPos.fx[#m1, #m2, #s1, #t14] := 0;
ArgPos.fx[#m1, #m2, #s1, #t15] := 0;
ArgPos.fx[#m1, #m2, #s2, #t01] := 0;
ArgPos.fx[#m1, #m2, #s2, #t02] := 0;
ArgPos.fx[#m1, #m2, #s2, #t03] := 0;
ArgPos.fx[#m1, #m2, #s2, #t04] := 0;
ArgPos.fx[#m1, #m2, #s2, #t05] := 1;
ArgPos.fx[#m1, #m2, #s2, #t06] := 0;
ArgPos.fx[#m1, #m2, #s2, #t07] := 0;
ArgPos.fx[#m1, #m2, #s2, #t08] := 0;
ArgPos.fx[#m1, #m2, #s2, #t09] := 0;
ArgPos.fx[#m1, #m2, #s2, #t10] := 0;
ArgPos.fx[#m1, #m2, #s2, #t11] := 0;
ArgPos.fx[#m1, #m2, #s2, #t12] := 0;
ArgPos.fx[#m1, #m2, #s2, #t13] := 0;
ArgPos.fx[#m1, #m2, #s2, #t14] := 0;
ArgPos.fx[#m1, #m2, #s2, #t15] := 0;
ArgMig.fx[#m1, #m2, #t01] := 0;
ArgMig.fx[#m1, #m2, #t02] := 0;
ArgMig.fx[#m1, #m2, #t03] := 0;
ArgMig.fx[#m1, #m2, #t04] := 1;
ArgMig.fx[#m1, #m2, #t05] := 0;
ArgMig.fx[#m1, #m2, #t06] := 0;
ArgMig.fx[#m1, #m2, #t07] := 0;
ArgMig.fx[#m1, #m2, #t08] := 0;
ArgMig.fx[#m1, #m2, #t09] := 0;
ArgMig.fx[#m1, #m2, #t10] := 0;
ArgMig.fx[#m1, #m2, #t11] := 0;
ArgMig.fx[#m1, #m2, #t12] := 0;
ArgMig.fx[#m1, #m2, #t13] := 0;
ArgMig.fx[#m1, #m2, #t14] := 0;
ArgMig.fx[#m1, #m2, #t15] := 0;
ArgPos.fx[#m1, #m3, #s1, #t01] := 0;
ArgPos.fx[#m1, #m3, #s1, #t02] := 0;
ArgPos.fx[#m1, #m3, #s1, #t03] := 1;
ArgPos.fx[#m1, #m3, #s1, #t04] := 1;
ArgPos.fx[#m1, #m3, #s1, #t05] := 0;
ArgPos.fx[#m1, #m3, #s1, #t06] := 0;
ArgPos.fx[#m1, #m3, #s1, #t07] := 0;
ArgPos.fx[#m1, #m3, #s1, #t08] := 0;
ArgPos.fx[#m1, #m3, #s1, #t09] := 0;
ArgPos.fx[#m1, #m3, #s1, #t10] := 0;
ArgPos.fx[#m1, #m3, #s1, #t11] := 0;
ArgPos.fx[#m1, #m3, #s1, #t12] := 0;
ArgPos.fx[#m1, #m3, #s1, #t13] := 0;
ArgPos.fx[#m1, #m3, #s1, #t14] := 0;
ArgPos.fx[#m1, #m3, #s1, #t15] := 0;
ArgPos.fx[#m1, #m3, #s2, t] := 0;
ArgMig.fx[#m1, #m3, t] := 0;
ArgPos.fx[#m1, #m4, #s1, #t01] := 0;
ArgPos.fx[#m1, #m4, #s1, #t02] := 0;
ArgPos.fx[#m1, #m4, #s1, #t03] := 1;
ArgPos.fx[#m1, #m4, #s1, #t04] := 1;
ArgPos.fx[#m1, #m4, #s1, #t05] := 1;
ArgPos.fx[#m1, #m4, #s1, #t06] := 1;
ArgPos.fx[#m1, #m4, #s1, #t07] := 1;
ArgPos.fx[#m1, #m4, #s1, #t08] := 1;
ArgPos.fx[#m1, #m4, #s1, #t09] := 1;
ArgPos.fx[#m1, #m4, #s1, #t10] := 0;
ArgPos.fx[#m1, #m4, #s1, #t11] := 0;
ArgPos.fx[#m1, #m4, #s1, #t12] := 0;
ArgPos.fx[#m1, #m4, #s1, #t13] := 0;
ArgPos.fx[#m1, #m4, #s1, #t14] := 0;
ArgPos.fx[#m1, #m4, #s1, #t15] := 0;
ArgPos.fx[#m1, #m4, #s2, t] := 0;
ArgMig.fx[#m1, #m4, t] := 0;
ArgPos.fx[#m2, #m4, #s1, #t01] := 0;
ArgPos.fx[#m2, #m4, #s1, #t02] := 0;
ArgPos.fx[#m2, #m4, #s1, #t03] := 0;
ArgPos.fx[#m2, #m4, #s1, #t04] := 0;
ArgPos.fx[#m2, #m4, #s1, #t05] := 0;
ArgPos.fx[#m2, #m4, #s1, #t06] := 0;
ArgPos.fx[#m2, #m4, #s1, #t07] := 0;
ArgPos.fx[#m2, #m4, #s1, #t08] := 0;
ArgPos.fx[#m2, #m4, #s1, #t09] := 1;
ArgPos.fx[#m2, #m4, #s1, #t10] := 0;
ArgPos.fx[#m2, #m4, #s1, #t11] := 0;
ArgPos.fx[#m2, #m4, #s1, #t12] := 0;
ArgPos.fx[#m2, #m4, #s1, #t13] := 0;
ArgPos.fx[#m2, #m4, #s1, #t14] := 0;
ArgPos.fx[#m2, #m4, #s1, #t15] := 0;
ArgPos.fx[#m2, #m4, #s2, #t01] := 0;
ArgPos.fx[#m2, #m4, #s2, #t02] := 0;
ArgPos.fx[#m2, #m4, #s2, #t03] := 0;
ArgPos.fx[#m2, #m4, #s2, #t04] := 0;
ArgPos.fx[#m2, #m4, #s2, #t05] := 0;
ArgPos.fx[#m2, #m4, #s2, #t06] := 0;
ArgPos.fx[#m2, #m4, #s2, #t07] := 1;
ArgPos.fx[#m2, #m4, #s2, #t08] := 0;
ArgPos.fx[#m2, #m4, #s2, #t09] := 0;
ArgPos.fx[#m2, #m4, #s2, #t10] := 0;
ArgPos.fx[#m2, #m4, #s2, #t11] := 0;
ArgPos.fx[#m2, #m4, #s2, #t12] := 0;
ArgPos.fx[#m2, #m4, #s2, #t13] := 0;
ArgPos.fx[#m2, #m4, #s2, #t14] := 0;
ArgPos.fx[#m2, #m4, #s2, #t15] := 0;
ArgMig.fx[#m2, #m4, #t01] := 0;
ArgMig.fx[#m2, #m4, #t02] := 0;
ArgMig.fx[#m2, #m4, #t03] := 0;
ArgMig.fx[#m2, #m4, #t04] := 0;
ArgMig.fx[#m2, #m4, #t05] := 0;
ArgMig.fx[#m2, #m4, #t06] := 0;
ArgMig.fx[#m2, #m4, #t07] := 0;
ArgMig.fx[#m2, #m4, #t08] := 1;
ArgMig.fx[#m2, #m4, #t09] := 0;
ArgMig.fx[#m2, #m4, #t10] := 0;
ArgMig.fx[#m2, #m4, #t11] := 0;
ArgMig.fx[#m2, #m4, #t12] := 0;
ArgMig.fx[#m2, #m4, #t13] := 0;
ArgMig.fx[#m2, #m4, #t14] := 0;
ArgMig.fx[#m2, #m4, #t15] := 0;
ArgPos.fx[#m3, #m4, #s1, #t01] := 0;
ArgPos.fx[#m3, #m4, #s1, #t02] := 0;
ArgPos.fx[#m3, #m4, #s1, #t03] := 0;
ArgPos.fx[#m3, #m4, #s1, #t04] := 0;
ArgPos.fx[#m3, #m4, #s1, #t05] := 0;
ArgPos.fx[#m3, #m4, #s1, #t06] := 0;
ArgPos.fx[#m3, #m4, #s1, #t07] := 0;
ArgPos.fx[#m3, #m4, #s1, #t08] := 1;
ArgPos.fx[#m3, #m4, #s1, #t09] := 1;
ArgPos.fx[#m3, #m4, #s1, #t10] := 0;
ArgPos.fx[#m3, #m4, #s1, #t11] := 0;
ArgPos.fx[#m3, #m4, #s1, #t12] := 0;
ArgPos.fx[#m3, #m4, #s1, #t13] := 0;
ArgPos.fx[#m3, #m4, #s1, #t14] := 0;
ArgPos.fx[#m3, #m4, #s1, #t15] := 0;
ArgPos.fx[#m3, #m4, #s2, t] := 0;
ArgMig.fx[#m3, #m4, t] := 0;
/*
Pos.fx[#m1,#s1,#t01] := 1;
Pos.fx[#m1,#s1,#t02] := 1;
Exec.fx[#m1,#s1,#t01] := 1;
Exec.fx[#m1,#s1,#t02] := 1;
StartExec.fx[#m1,#t01] := 1;
EndExec.fx[#m1,#t02] := 1;
Pos.fx[#m2,#s1,#t01] := 1;
Pos.fx[#m2,#s1,#t01] := 1;
Pos.fx[#m2,#s1,#t03] := 1;
Pos.fx[#m2,#s1,#t04] := 1;
Exec.fx[#m2,#s1,#t01] := 0;
Exec.fx[#m2,#s1,#t03] := 1;
Exec.fx[#m2,#s1,#t04] := 1;
StartExec.fx[#m2,#t03] := 1;
EndExec.fx[#m2,#t04] := 1;
ArgPos.fx[#m1,#m2,#s1,#t02] := 1;
ArgPos.fx[#m1,#m2,#s1,#t03] := 1;
ArgMig.fx[#m1,#m2,#t02] := 0;
ArgMig.fx[#m1,#m2,#t03] := 0;
*/
/*
StartExec.fx[#m1,#t01] := 1;
StartExec.fx[#m1,#t02] := 0;
StartExec.fx[#m1,#t03] := 0;
StartExec.fx[#m1,#t04] := 0;
StartExec.fx[#m1,#t05] := 0;
EndExec.fx[#m1,#t01] := 0;
EndExec.fx[#m1,#t02] := 1;
EndExec.fx[#m1,#t03] := 0;
EndExec.fx[#m1,#t04] := 0;
EndExec.fx[#m1,#t05] := 0;
Exec.fx[#m1,#s1,#t01] := 1;
Exec.fx[#m1,#s1,#t02] := 1;
Exec.fx[#m1,#s1,#t03] := 0;
Exec.fx[#m1,#s1,#t04] := 0;
Exec.fx[#m1,#s1,#t05] := 0;
ExecSite.fx[#m1,#s1] := 1;
Mig.fx[#m1,#t01] := 0;
Mig.fx[#m1,#t02] := 0;
Mig.fx[#m1,#t03] := 0;
Mig.fx[#m1,#t04] := 0;
Mig.fx[#m1,#t05] := 0;
Pos.fx[#m1,#s1,#t02] := 1;
*/
end;
--- source/glplpx8a.c.orig Fri Mar 21 10:57:58 2003
+++ source/glplpx8a.c Fri Mar 21 10:21:25 2003
@@ -1080,14 +1080,14 @@
/* main sheet */
for (what = 1; what <= 2; what++)
{ int mn, ij;
fprintf(fp, "\n");
fprintf(fp, " No. %-12s St Activity Lower bound Uppe"
- "r bound Marginal\n",
+ "r bound Marginal Failure\n",
what == 1 ? " Row name" : "Column name");
fprintf(fp, "------ ------------ -- ------------- ------------"
- "- ------------- -------------\n");
+ "- ------------- ------------- ---------\n");
mn = (what == 1 ? lpx_get_num_rows(lp) : lpx_get_num_cols(lp));
for (ij = 1; ij <= mn; ij++)
{ char *name;
int typx, tagx;
double lb, ub, vx, dx;
@@ -1140,10 +1140,20 @@
{ if (dx == 0.0)
fprintf(fp, "%13s", "< eps");
else
fprintf(fp, "%13.6g", dx);
}
+ else
+ fprintf(fp, " ");
+ /* failure of dependencies */
+ if (typx == LPX_LO && (vx < lb))
+ fprintf(fp, " lb");
+ else if (typx == LPX_DB && (vx
> ub))
+ fprintf(fp, " ub");
+ else if (typx == LPX_FX && (vx
!= lb))
+ fprintf(fp, " fx:
vx=%e, lb=%e", vx, lb);
+// fprintf(fp, " fx");
/* end of line */
fprintf(fp, "\n");
}
}
fprintf(fp, "\n");
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Bug-glpk] 1e-0 vs. 1e+0,
Frank Eschmann <=