WUT_Computer_Science/NotProgramming/MOM/report_two/sections/07-implementacja-modelu.tex
Krzysztof kuhy Rudnicki ffa5dad02a Split 19 over-cap LaTeX reports, proving each PDF is unchanged
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
2026-08-28 19:47:12 +02:00

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}