Výsledek:
Následující kód nepatří k předchozímu obrázku a konverguje trochu náladově za 23-30 kroků. Posílám ho sem, abychom se na facebooku nebavili bez podkladu a protože mě překvapuje, že mi to konverguje za 23 kroků přestože podle zadání by to mělo doběhnout někde na 40ti. Dokážte mi s tím někdo poradit?
PS: Kód je psaný pro obecné rozměry R a C.
PPS: Za par minut odevzdavam, tak doufam, ze to do te doby nikdo neobslehne tak jak to tulezi a bezi
function I = binrec(R,C) % rozmery vysledneho obrazku... n1 = size(R,2); n2 = size(C,2); nn = n1+n2; % vysledny obrazek init... I = repmat(0,n1,n2); % pomocny vektor pro zapamatovane ceny z minule iterace... cprev = repmat(0,nn,nn); % zdroje a spotrebice... b = [ R' ; -C' ]; % lower-bounds na vsechny trubky je nula... l = repmat(0,nn,nn); % upper-bounds je jedna pro trubky vedouci ze zdrojů R do spotřebičů C... u = [repmat(0,n1,n1), repmat(1,n1,n2);... repmat(0,n2,n1), repmat(0,n2,n2)]; % měli bychom to stihnout za icount iterací... icount = 40; for ic = 1:icount c = fce(cprev,I); cprev = c; g = graph; F = g.mincostflow(c,l,u,b); % nedoslo ke zmene, ukoncujeme..? if (I == F(1:n1,n2+1:end)) binplot(ic,I); break; end I = F(1:n1,n2+1:end); binplot(ic,I); end end
Funkce binplot obsahuje subplot a vse co je presne popsane v zadani pro vykresleni.
Funkci fce
necham na laskavem ctenari, jsou to dva forcykly a v nich sest ifů presne jak jsou popsane v zadani =D