1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334
|
integer variablen werden nicht automatisch in binr variablen
umgewandelt wenn das "qubo" verwendet wird.
bei xlp_glue das lps_getnzo dient nur dafuer sicherzustellen
dasnicht zwei gleiche variablen in den monomen kommen.
besser term_simplify vorher aufrufen dann braucht man das
nicht mehr.
hash_lookup ggf. scheller machen durch weniger vergleiche.
Braucht man hier den else part und wenn ja warum.
subto c2: sum <i> in I :
if (i mod 2 == 0) then 3 * x[i] else -2 * y[i] end <= 3;
subto c1: if (0 == 1) then x + y else x end <= 0; geht
subto c1: if (0 == 1) then x + y else 2 end <= 0; geht nicht
subto c1: if (0 == 1) then x + y end <= 0; geht nicht
need_startval dient nur dazu festzustellen ob constraints
beim erzeugen gegen die werte gecheckt werden. Das sollte
auch automatisch gehen.
numbdbl auf long double umstellen bzw. __float128 bei gnu
Bei Read von leeren Daten die dimension des tuples aus
dem read statement holen.
SOS nicht extra implementieren sondern als sonderform von contraints.
Constraintname check selbt machen
Bug doublicate SOS names. (Crash)
check blkmem. gucken ob auch woanders noch zu benutzen
bei tuple element vorher gucken ob kleingenug. Meistens ja
aber nicht immer.
alles valids in NDEBUG und mem_check fr allozierte dazu
checks fr lange zeilen, viele Felder
set A := { read "ff" as "<65535n,65536n>" };
alle ausgaben umlenkbar
CHANGELOG durchgehen
CPP documentiert ?
set J := { 1 to max(I)+1 };
Man muss statt dessen schreiben
set J := { 1 to (max(I))+1 };
cplex anbidung.
WITH_ZLIB=1 im Makefile
Checks vorrang operatoren Insbesondere -2^3
Fehler abgefangen wenn default anderer typ als werte in param? read!
- doku index expressens in set.
- warning / tests "
namen von contrainst duerfen keine schlsselworte sein. Unntig.
warum kann man nicht x[i,j] (binary) == (w[i] - w[j] == 0) schreiben?
------------------
Index funtion die jedem set element eine eindeutige Zahl zuordnet.
Dies erzeugt keinerleit Ausgabe. Warum?
set I := { 1 .. 10 };
param a[<i> in I] := i + 3;
subto c17: a[min I] <= a[max I];
check fr filesystem/out of memory fehler (ulimit)
numbdbl.c for linking without gmp
Regel bei Container sollte doch sein:
Liefern wenn moeglich const
Fressen wenn sie sichs merken (weil man immer ein copy zwischenschieben kann) oder?
Man knnte vorher mal gucken welche reads ingesamt vorkommen.
Komt einer mehrfach vor, wird die ganze Datei eingelesen und ein
strg read fdraus gemacht.
Test fuer spezielle fehlersituationen.
z,B. param x[E] : = ...
do print x;
gibt eine obscure Fehlermedung.
Diser Fall sollte ewtl. behandelt werden.
Auf jedenfall getestest werden.
min2/max2 warnung wenn empty list
x[i,j] = y[i] xor y[j];
wie formuliert man das, warum geht
subto c1: forall <i,j> in E do
vif (y[i] == 1) xor (y[j] == 1) then x[i,j] == 1 else x[i,j] == 0 end;
nicht
table sizes anpassen.
static SetIter* set_multi_iter_init(
Warum wird nicht der index mit der groessten anzahl von membern als fixed genommen?
-fcheck-memory-usage ?
Zielfunktion als Rows* einrichten
Vorteile: nur non-zeros belegen speicher, mehrere Zielfunktionen mglich.
Kann man vabs in der Zielfunktion einsetzen?
Und wenn nichtwarum nicht?
TeX output?
var/con macht einzeln mallocs
sto_size ist fix 1000
Hash size ist fix 1000003
"read from file found no data" in warning bei sets umwandeln.
Schnelleren hash-code von numb ber nenner/zaehler
auerdem ggf im Tuple cachen.
AND OR XOR mit variablen einfach als audruck fr binrvariablen erlauben.
z.b. x[i] AND x[j] == 1
Schneller machen, insbesonder <i,p> in I wenn p schon gesetzt ist dauert viel zu lange. Direkten zugrif auf die submenge einrichten.
Einige Systeme zhlen in check.sh nur die
ersten 16, dann nicht weiter.
Zugriff auf die Bounds der Variablen einbauen. Z.B. mit
getupper(x), getlower(x). Geht das berhaupt?
Bie sowas sollte es gehen da das template wie <i, "xx", 1n>
aussieht.
set A[<i> in I] := { read ipfile[i] as "<1n>" comment "#" };
gcov -f -b -o obj/O.linux.x86.gnu.gcov/ src/vinst.c
ist auch sehr geeignet um Statements und branches zu zhlen.
Automatische auswertung ?
180 kann bei == kommen, wenn eine der Beiden Ungleichungen
an der Bound liegt.
var x[I] integer >= -10 <= 10;
subto c1: vif x[1] < 0 then x[2] == 10 end;
Gibt es bei 180 einen false fall?
Improve position of error messages by giving the right child.
set.c testen ob bestimmte tuple automatisch in reihenfolge
erzeugt werden. Wenn ja, markieren, damit binsearch eingesetzt
werden kann. (z.B. range oder subset)
105 kann auch von der Zielfunktion kommen.
Frage, wie bring man Kosten an den internen variablen an.
Idee: VABS(..., "name"); VIF(..., name) vieleich dann doch
VAND(a, b, "name); VCMP(.... <= 5, "name") oder so
Dann Deklaration: var name binary bei den bool sachen und
var name integer bei vabs und dann wird
nichts erzeugt, sondern die angegebene variable benutzt.
checken was passiert wenn man if bin_var == 1 then schreibt.
xor testen
berprfen ob type() in der semantic von inst.h richtig ist
Mon sollte erkennen, das dies immer false ist
var x[I] integer >= -7 <= 0;
subto c1: vif x[1] + x[4] != 5 then x[2] + x[3] <= 7 end;
check und print in checks expr? einbauen
do print expr_list
check.sh fr warning erweitern
test vergleich verbessern fuer 700er und 800er fehler.
trace wenn fehler in function?
cplex stream version?
enter prob
zimpl -F cplex | awk
getrennte -F's fuer .lp und .tbl ?
was passiert bei <i,i> in { <1,1>, <1,2>, <2,1>, <2,2> } = |2|{<1,1>,<1,2>,<2,1>,<2,2>} genau ?
warum gibt set A:= {1,"hallo", 2, "a"}; keine fehler ? soll das so?
Warning 165 kommt nur wenn die Mengen die gleiche cardinalitt haben.
check, that -2^4 + 3! * 2 - 3 has the right value.
check fuer read/include siehe example
MPS testen auch ranges.
Funktion statistik Anzahl vars/Cons/Boxed/Fixed/NZOs etc,
(bei soplex/extr gibts schon so was)
Funktion timing.
defterm?
defcons?
Test mit 1 Mill var einbauen oder Sascha fragen
ewtl : x1 + x2, x2 + x3, ... x98 + x99, x99 = 5 => preprocessing
if (....) constraint else constraint endif
und/oder
if (....) term else term endif
einbauen
unterstuetzung von semi-continous variablen in cplex
check mit fixierten variablen.
check separate flag
check: Tests fr preprocessing
Speedups:
numbgmp: mpq_clear aufrufen fr verwendete oder schon erledigt.
strstore: string table, jeder nur einmal und dann handle. Macht auch
str_has und str_cmp schneller.
auf explicite copys umstellen. list elem entry
numb = new_numb
elem = new_elem(numb);
tuple_new_tuple(elem);
free(elem);
free(numb);
nur noch
tuple_new_tuple(new_elem(new_numb)));
und ansnsten hatlr
tuple_new_tuple(elem_copy(elem))));
Mindestens in Elem und Numb machen die SID wenig sinn,
weil sie nie zurueckgesetzt werden.
Einleseroutinen fr indizerte Sets
tru64/opt INFINITY warnung
ibm ggf -qwarn64
es fehlt noch sowas wie sum of sets (Big Uninion)
macht es sinn "idxset : sexpr condition" zu haben ?
condition kann in keiner weise auf das element zugreifen.
macht es einen Sinn param x[<i> in I ...] := 3 * i mit default zu haben.
Es sind doch alle indices initialisiert.
indexset sollte auch fr variablen und parametergehen.
-----------------------
Mal berlegen ob es nicht eine ide wre
Metakontruckte eiinzufhren wie
IF x[i] > y[i] AND z[i] == 0 THEN
x[i] + y[i] == 5
ELSE
x[i] + y[i] + z[i] == 7
Was im prinzip ein bedingtes ODER ist.
x[i] + y[i] == 5 OR x[i] + y[i] + z[i] == 7
------------------------------------------
Warnung bei set operationen auf sets mit inkompatiblen tupeln
z.B. { 1, 2, 3 } \ { "3" }
-------------------------------
Demangle script. das die .lp + .tbl fr menschen lesbar macht.
----------------------------
Potenzmengen und mengen element kann dann auch eine menge sein,
so das man sagen kann:
forall w in pot(V) with s in W do
---------------------------------------------------
exists <a,b,c> in X : b == 4 and c == 3 shift/reduce beseitigen count?
Teilmengen zuweisung in sexpr
min <a,b> in X : expr
max =====================> Dokumentation
include gucken auch innerhalt eines ; ausdrucks.
shortcummings and Tips&Trick Abschnitt
Im LP reihenfolge der sets beibehalten
|