mirror of
https://github.com/kuhyx/WUT_Computer_Science.git
synced 2026-11-10 22:27:08 +01:00
The 250-line cap applies to prose too, and the reports were the worst
offenders -- ENUME's projectA.tex alone was 1,876 lines. Each is now a
preamble plus one \input{} per section, which is how a long LaTeX document is
normally organised; not one byte of prose was rewritten.
"The PDF is unchanged" is checked by a script rather than by eye, because
hashing the PDF cannot work: pdflatex stamps a /CreationDate and an /ID into
every build, so two runs of the SAME source already differ. tex_fingerprint.sh
compares what a reader sees instead -- page count plus a hash of the extracted
text -- and it is stable across rebuilds of untouched sources, which is the
property that makes it usable as a gate.
It earned its keep immediately. Both ECOTE reports quote an example LaTeX
document inside an lstlisting block, so \end{document} appears in the middle
of the file; splitting on the FIRST one stranded everything after it. Same
page count, different text, caught automatically. EOPSY lab3 exposed a second
bug: a \section{} title that runs onto the next line.
Result: 19 .tex over the cap -> 1. The survivor,
ELAC/.../03-building-nfa-...tex, is 418 lines of consecutive tikz figures
with no subsection to split on and needs a hand-placed boundary.
Verified: 29 splits across two passes (section, then subsection for the
pieces still over), every one reporting `unchanged` from
scripts/tex_fingerprint.sh --check.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0172dj34FDpao6wsix8ZuCzE
164 lines
5.1 KiB
TeX
164 lines
5.1 KiB
TeX
\section{Implementacja modelu}
|
|
\begin{lstlisting}[caption= plik mod]
|
|
# PARAMETRY
|
|
# Stan poczatkowy
|
|
set Z;
|
|
# Zakupione surowce, s1 i s2
|
|
set S; set S1; set S2;
|
|
# Surowiec S1 zaladowany do wagonow
|
|
set G1;
|
|
# Surowce w przygotowywalni
|
|
set P; set P1; set P2;
|
|
# Surowiec S2 w zakladzie obrobki cieplnej
|
|
set O2;
|
|
# Polprodukty
|
|
set D; set D1; set D2;
|
|
# Wyroby
|
|
set W; set W1; set W2;
|
|
# Stany surowcow, zakupione, wyroby, obrobka cieplna
|
|
set N; set Nz; set Nw; set Nzw;
|
|
|
|
# Cena sprzedazy wyrobu
|
|
param r{w in W};
|
|
# Przepustowosc przeplwyu z jednego stanu do drugiego
|
|
param u{i in N, j in N};
|
|
# Mnoznik definijujacy przepwy ze stanu surowiec
|
|
# w przygotowalni do stanu polprodukt
|
|
param m{p in P, d in D};
|
|
|
|
# ZMIENNE DECYZYJNE
|
|
# przeplyw pomiedzy stanem i a stanem j
|
|
var f{i in N, j in N}, >= 0, integer; # Ograniczenie 1
|
|
|
|
# Zmienne pomocnicze
|
|
# liczba zakupionego surowca S1 powyzej 2387 ton
|
|
var a1, >= 0, integer; # Ograniczenie 5
|
|
# liczba zakupionego surowca S1 powyzej 6659 ton
|
|
var a2, >= 0, integer; # Ograniczenie 6
|
|
# liczba zakupionego surowca S2 powyzej 2090 ton
|
|
var b1, >= 0, integer; # Ograniczenie 7
|
|
# liczba zakupionego surowca S2 powyzej 4349 ton
|
|
var b2, >= 0, integer; # Ograniczenie 8
|
|
# liczba wynajetych lokomotyw
|
|
var wl, >= 0, integer;
|
|
# liczba wagonow transportujacych surowiec S1 do przygotowalni
|
|
var cp1, >= 0, integer;
|
|
# liczba ciezarowek transportujacych surowiec S2 do przygotowalni
|
|
var ep2, >= 0, integer;
|
|
# liczba ciezarowek transportujacych surowiec S2
|
|
# do zakladu obrobki cieplnej
|
|
var eo2, >= 0, integer;
|
|
var e1, >= 0, <=1, integer;
|
|
var e2, >= 0, <=1, integer;
|
|
# Liczba pracownikow
|
|
var l, >= 0, integer;
|
|
|
|
maximize Q: (sum {i in N, w in W} r[w] * f[i,w])
|
|
- (19* (sum {z in Z, s1 in S1} f[z, s1] )
|
|
- 5*a1
|
|
- 4*a2
|
|
+ 11* sum {z in Z, s2 in S2} (f[z, s2])
|
|
+ 2*b1
|
|
+ 2*b2
|
|
+ 1290*cp1
|
|
+ 1500*ep2
|
|
+ 1500*eo2
|
|
+ 160*l
|
|
+ 10000*e1
|
|
+ 40000*e2);
|
|
|
|
# OGRANICZENIA
|
|
subject to
|
|
# Ogolne i Dostepne surowce
|
|
Ogr_1_3_4{i in N, j in N}:
|
|
f[i,j] <= u[i,j];
|
|
Ogr_2{k in Nzw}:
|
|
sum {i in Nz} f[k,i] = sum {j in Nw} f[j,k];
|
|
# Koszt zakupu surowcow
|
|
Ogr_9{z in Z, s1 in S1}:
|
|
a1 <= f[z,s1] - 2387;
|
|
Ogr_10{z in Z, s1 in S1}:
|
|
a2 <= f[z,s1] - 6659;
|
|
Ogr_11{z in Z, s2 in S2}:
|
|
b1 >= f[z,s2] - 2090;
|
|
Ogr_l2{z in Z, s2 in S2}:
|
|
b2 >= f[z,s2] - 4349;
|
|
# Transport surowca S1
|
|
Ogr_13{s1 in S1, g1 in G1}:
|
|
cp1 >= f[s1,g1] / 18;
|
|
# Transport surowca S2
|
|
Ogr_14{s2 in S2, p2 in P2}:
|
|
ep2 >= f[s2,p2] / 25;
|
|
# Praca przygotowalni
|
|
Ogr_15:
|
|
sum {i in N, p in P} f[i,p] <= 16000;
|
|
Ogr_16{p in P, d in D}:
|
|
(sum {i in N} f[i,p]) * m[p,d] = f[p,d];
|
|
# Koszt pracy przygotowalni
|
|
Ogr_17:
|
|
l >= (sum {i in N, p in P} f[i,p])/150;
|
|
# Transprot S2 do obrobki cieplnej
|
|
Ogr_18{s2 in S2, o2 in O2}:
|
|
eo2 >= f[s2,o2] / 25;
|
|
# Praca zakladu obrobki cieplnej
|
|
Ogr_19{s2 in S2, o2 in O2}:
|
|
f[s2,o2] <= 6000;
|
|
# Minimalna dostarczona ilosc wyrobow
|
|
Ogr_20{w in W}:
|
|
sum {i in N} f[i,w] >= 5000;
|
|
# Na jedna lokomotywe przypada co najwyzej 12 wagonow
|
|
Ogr_21:
|
|
12 * wl >= cp1;
|
|
|
|
solve;
|
|
display {i in N, j in N: f[i,j] > 0}: f[i,j];
|
|
display: a1; display: a2; display: b1; display: b2; display: wl;
|
|
display: cp1; display: ep2; display: eo2; display:
|
|
e1; display: l;
|
|
\end{lstlisting}
|
|
|
|
\begin{lstlisting}[caption= plik dat]
|
|
data;
|
|
set Z := z;
|
|
set S := s1, s2;
|
|
set S1 := s1;
|
|
set S2 := s2;
|
|
set G1 := g1;
|
|
set P := p1, p2;
|
|
set P2 := p2;
|
|
set O2 := o2;
|
|
set D := d1, d2;
|
|
set W := w1, w2;
|
|
set N := z, s1, s2, g1, p1, p2, o2, d1, d2, w1, w2;
|
|
set Nz := s1, s2, g1, p1, p2, o2, d1, d2, w1, w2;
|
|
set Nw := z, s1, s2, g1, p1, p2, o2, d1, d2;
|
|
set Nzw := s1, s2, g1, p1, p2, o2, d1, d2;
|
|
param r := w1 467 w2 480;
|
|
param u :=
|
|
z z 0 z s1 12000 z s2 8000 z g1 0 z p1 0
|
|
z p2 0 z o2 0 z d1 0 z d2 0 z w1 0 z w2 0
|
|
s1 z 0 s1 s1 0 s1 s2 0 s1 g1 99999 s1 p1 0
|
|
s1 p2 0 s1 o2 0 s1 d1 0 s1 d2 0 s1 w1 0 s1 w2 0
|
|
s2 z 0 s2 s1 0 s2 s2 0 s2 g1 0 s2 p1 0
|
|
s2 p2 99999 s2 o2 99999 s2 d1 0 s2 d2 0 s2 w1 0 s2 w2 0
|
|
g1 z 0 g1 s1 0 g1 s2 0 g1 g1 0 g1 p1 99999
|
|
g1 p2 0 g1 o2 0 g1 d1 0 g1 d2 0 g1 w1 0 g1 w2 0
|
|
p1 z 0 p1 s1 0 p1 s2 0 p1 g1 0 p1 p1 0
|
|
p1 p2 0 p1 o2 0 p1 d1 99999 p1 d2 99999 p1 w1 0 p1 w2 0
|
|
p2 z 0 p2 s1 0 p2 s2 0 p2 g1 0 p2 p1 0
|
|
p2 p2 0 p2 o2 0 p2 d1 99999 p2 d2 99999 p2 w1 0 p2 w2 0
|
|
o2 z 0 o2 s1 0 o2 s2 0 o2 g1 0 o2 p1 0
|
|
o2 p2 0 o2 o2 0 o2 d1 0 o2 d2 0 o2 w1 0 o2 w2 99999
|
|
d1 z 0 d1 s1 0 d1 s2 0 d1 g1 0 d1 p1 0
|
|
d1 p2 0 d1 o2 0 d1 d1 0 d1 d2 0 d1 w1 99999 d1 w2 0
|
|
d2 z 0 d2 s1 0 d2 s2 0 d2 g1 0 d2 p1 0
|
|
d2 p2 0 d2 o2 0 d2 d1 0 d2 d2 0 d2 w1 0 d2 w2 99999
|
|
w1 z 0 w1 s1 0 w1 s2 0 w1 g1 0 w1 p1 0
|
|
w1 p2 0 w1 o2 0 w1 d1 0 w1 d2 0 w1 w1 0 w1 w2 0
|
|
w2 z 0 w2 s1 0 w2 s2 0 w2 g1 0 w2 p1 0
|
|
w2 p2 0 w2 o2 0 w2 d1 0 w2 d2 0 w2 w1 0 w2 w2 0;
|
|
param m := p1 d1 0.1 p1 d2 0.9 p2 d1 0.1 p2 d2 0.9;
|
|
end;
|
|
\end{lstlisting}
|
|
|