-
Notifications
You must be signed in to change notification settings - Fork 0
/
TODO
334 lines (199 loc) · 8.12 KB
/
TODO
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
integer variablen werden nicht automatisch in binär 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 für allozierte dazu
checks für 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 schlüsselworte sein. Unnötig.
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 für 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 könnte 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 möglich.
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
außerdem ggf im Tuple cachen.
AND OR XOR mit variablen einfach als audruck für binärvariablen 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 zählen 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 zählen.
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
überprüfen 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 für 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 cardinalität 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 für preprocessing
Speedups:
numbgmp: mpq_clear aufrufen für 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 für 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 für variablen und parametergehen.
-----------------------
Mal überlegen ob es nicht eine ide wäre
Metakontruckte eiinzuführen 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 für 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