%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%% FILE: ll.m
%%
%% Laila Laihialaisen harjoitustyo 1 (minialku).
%%
%% Laila Laihialainen asuu aitinsa luona Laihialla ja miettii mita tehda
%% ensi lukuvuonna.
%%
%% Laila pohtii seuraavien vaihtoehtojen valilla:
%%
%% a1 = Muuttaa Vaasaan VOAS-soluun.
%% a2 = Autoillaan Vaasaan.
%% a3 = Etaopiskellaan Laihialta kasin.
%%
%% Skenaariot ovat
%%
%% s1 = Oliopolio hallinnassa.
%% s2 = Oliopolio paalla, kampus rajoitetusti auki, osittain etaopetusta.
%% s3 = Oliopolio paalla ja yliopisto taysin etaopetuksessa. (Ruokalat kiinni)
%%
%% Skenaarioiden todennakoisyydet:
%%
%% p0 = tn etta Oliopolio on paalla.  (p0 = p2+p3)
%% q0 = 1-p0
%%
%% p1 = q0
%% p2 = p0/2
%% p3 = p0/2
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Palkkiomatriisit (monitavoiteoptimointi)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% Kuukausittaiset kulut
R1 = [
100+40   100+50  100+100;   %% VOAS-solu  (vuokra+ruoka)
   120  0.5*120    0*120;   %% Autoilu (100% - 50% - 0% lahiopetusta)
     0        0        0;   %% Etaily  (baseline)
];

R1 = -R1;     %% Maksimointimuoto!


%% Opintopistekertyma
R2 = [
30  25  20;   %% VOAS-solu
25  25  20;   %% Autoilu
10  15  20;   %% Etaily
];

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Paatossaanto on "oa".  Laskuja kun p0 vaihtelee vahan.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

p0arvot = [0.00  0.25  0.50  0.75  1.00];  %% 0:0.25:1, linspace(0,1,5)

for i=1:length(p0arvot)
    p0 = p0arvot(i);
    q0 = 1-p0;

    po1.pmat = R1;
    po1.psaanto = "oa";
    po1.tn = [q0  p0/2  p0/2]';
    pr1 = pmatriisi(po1);
    V1(:,i) = pr1.parvot;

    po2.pmat = R2;
    po2.psaanto = "oa";
    po2.tn = [q0  p0/2  p0/2]';
    pr2 = pmatriisi(po2);
    V2(:,i)  = pr2.parvot;
end

%% Matriisissa V1 on oa-saannon arvofunktiota kuukausikuluille eri
%% Oliopoliotodennakoisyyksille.  Matriisissa V2 on oa-saannon arvofunktioita
%% opintopistekertymalle eri Oliopoliotodennakoityyksille.
%%
%% Osoittautuu, etta V1:n mukaan a3 on aina optimaalinen ja V2:n mukaan a1 on
%% aina optimaalinen.

%% Yhdistetty paatossaanto on V(p0,w) = wV1(p0) + (1-w)V2(p0).  Lasketaan ja
%% piirretaan sita vastaava herkkyyskuva, kun p0 ja w vaihtelevat

%% Otteistustaajuus N.  Kun N=500 laskut kestavat noin 3 sekuntia.
N = 500;
p0arvot = linspace(0,1,N);
warvot = linspace(0,1,N);
z = zeros(N);

%% Paatossaantojen vakiokentat (uudestaan, varmuuden valttamiseksi)
po1.psaanto = "oa";
po1.pmat = R1;
po2.psaanto = "oa";
po2.pmat = R2;

%% Herkkyysmatriisin z laskeminen.
for i=1:N
    p0 = p0arvot(i);
    q0 = 1-p0;
    po1.tn = [q0  p0/2  p0/2]';
    po2.tn = [q0  p0/2  p0/2]';
    pr1 = pmatriisi(po1);
    pr2 = pmatriisi(po2);
    v1 = pr1.parvot;
    v1 = (v1-min(v1))/(max(v1)-min(v1));
    v2 = pr2.parvot;
    v2 = (v2-min(v2))/(max(v2)-min(v2));
    for j=1:N
        w = warvot(j);
        v = w*v1 + (1-w)*v2;  %% v = v(p0,w)
        [roskaa, z(j,i)] = max(v);
    end
end

%% Herkkyysmatriisin z piirtaminen
contourf(p0arvot, warvot, z);
colormap([1 0 0; 1 1 0; 0 0 1]);
text(0.1,0.9, "a_1","fontsize", 24);
text(0.8,0.5, "a_2","fontsize", 24);
text(0.1,0.1, "a_3","fontsize", 24);


%% Kuvasta nakyy etta kaikki kolme vaihtoehtoa a1, a2 ja a3 voivat olla
%% optimaalisia riippuen siita, mita parametrien p0 ja w arvot ovat.
