Re(2): rekursives program
Geizhals » Forum » Programmierung » rekursives program (14 Beiträge, 561 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
rekursives program
09.09.2014, 13:57:04
Hi,

ich stehe im Moment ein bisschen bei einem rekursiven Problem an und wäre dankbar für jede Hilfe.

Die Ausgangslage:
ich habe N Variablen die sich zwischen festgelegten Grenzen befinden, jedoch sind die Grenzen von den vorherigen Variablen abhängig (d.h Variable 2 ist von Variable 1 abhängig, Variable 3 ist von Variable 2 und Variable 1 abhängig).

In einem ersten Schritt wurde jede Variable in Brackets unterteilt und das Minimum und das Maximum empirisch gemessen (unabhängig von allen anderen).

Um es zu verdeutlichen, heisst dass (für zwei Variablen) als Beispiel:
Variable 1: min: 0, max: 1 (diese ist unabhängig) und liegt (zB) in 3 Stufen vor:
(1) Variable 1 = 0.33: Variable 2: min: 0, max: 0.25
(2) Variable 1 = 0.66: Variable 2: min: 0.1, max: 0.4
(3) Variable 1 = 1: Variable 2: min 0.2, max: 1

als Ausgabe hiervon sollen dann X Schritte (zB 6) für Variable 2, zwischen deren min/max ausgegeben werden (also in (1) von oben: 0, 0.05, 0.1, 0.15, 0.2, 0.25).

Aus dem obigen Beispiel werden also schon 18 Kombinationen erstellt:
Nr, Variable 1, Variable 2
1, 0, 0
2, 0, 0.05
3, 0, 0.1
...
6, 0, 0.25
7, 0.33, 0.1
8, 0.33, 0.16
...


soweit einfach, bei 3 Variablen wird es schon komplizierter, hier soll dann gelten:
das Minimum/Maximum für Variable 3 ist das jeweilige Maximum der Minima (Minimum der Maxima) der vorherigen Variablen.

Wiederum als Beispiel:
(1) Variable 1 = 0.33: Variable 2: min: 0, max: 0.25, Variable 3: min: 0, max: 0.25
   (1b) Variable 2 = 0: Variable 3: min: 0, max: 0.05 --> Min für Variable 3 ist 0, Max=0.05 (min aus 0.25 und 0.05)
   (1c) Variable 2 = 0.05: Variable 3: min: 0.02, max: 0.15 --> Min für Variable 3 ist 0.02 (max aus 0 und 0.02), Max=0.15 (min aus 0.25 und 0.15)
   (1d) Variable 2 = 0.01: Variable 3: min: 0.05, max: 0.35 --> Min für Variable 3 ist 0.05 (max aus 0 und 0.05), Max=0.25 (min aus 0.25 und 0.35)
...

Die Grenzen in den Szenarien 1b, 1c usw. werden aus den empirischen Angaben interpoliert (d.h. wenn die ursprünglichen Bracekts für Variable 2 zb 0 und 0.05 (usw.) waren und jetzt für 0.02 ein Szenario erstellt wird, wird aus den Minimas/Maximas von 0 und 0.05 auf 0.02 interpoliert). Es sollen für Variable 3 wieder 6 Szenarien erstellt werden

Als Ausgabe würde ich hier auf:
Nr, Variable 1, Variable 2, Variable 3
1, 0, 0, 0
2, 0, 0, 0.01
3, 0, 0, 0.02
...
7, 0, 0.05, 0.02
8, 0, 0.05, 0.046
...

Ich hoffe das Problem ist verständlich, in Wahrheit brauche ich "einfach" nur eine Liste der möglichen Verteilungsräume der Variablen unter Vorbedingungen.

Für Hilfe bin ich sehr dankbar!


mfg

Penguin
Antworten PM Alle Chronologisch
 
Melden nicht möglich
.  Re: rekursives program  (zeddicus am 09.09.2014, 14:29:36)
..
Re(2): rekursives program
09.09.2014, 14:57:56
Zuerst die Minima/Maxima je Variable (matlab-code):

------------------------

for i=1:size(mySurpriseModelInputs,2)
    % bin the data
    myVarBin{i} = unique(quantile(mySurpriseModelInputs(:, i),(0:0.10:1)'));
    % map to bins
    [myBinCount,myBinPos] = histc(mySurpriseModelInputs(:,i),myVarBin{i});
    % cut off edges
    if myBinCount(end) == 1, myBinPos(myBinPos==max(myBinPos))=max(myBinPos)-1;end
    if myBinCount(1) == 1, myBinPos(myBinPos==min(myBinPos))=min(myBinPos)+1;end

    % determine the extreme's per bracket
    [myTempMax,myTempMin] = deal(zeros(size(unique(myBinPos),1),1));
    for j=1:length(unique(myBinPos))
        myTempMin(j,1) = min(mySurpriseModelInputs(myBinPos==j,setdiff(1:size(mySurpriseModelInputs,2),i)));
        myTempMax(j,1) = max(mySurpriseModelInputs(myBinPos==j,setdiff(1:size(mySurpriseModelInputs,2),i)));
    end

    if size(myVarBin{i},1)>10
        myInputMin{i} = horzcat(myInputMin{i}(:,1:i-1),myVarBin{i}(1:end-1),myInputMin{i}(:,i:end));
        myInputMax{i} = horzcat(myInputMax{i}(:,1:i-1),myVarBin{i}(1:end-1),myInputMax{i}(:,i:end));
    else
        myInputMin{i} = horzcat(myInputMin{i}(:,1:i-1),myVarBin{i},myInputMin{i}(:,i:end));
        myInputMax{i} = horzcat(myInputMax{i}(:,1:i-1),myVarBin{i},myInputMax{i}(:,i:end));
    end
end
mySimulationBoundaries = struct('min',{myInputMin},'max',{myInputMax});

------------------------

der output ist also ein set von min/max je variable (aller anderen Variablen), wenn die gegebene Variable einen bestimmten wert hat. Der Grund für das nicht in einer Matrix zu haben ist, das eine der Variablen der Wochentag ist und daher nur 5 Mapping-Punkte hat (die anderen 11).

Als Anforderung hätte ich jetzt gerne für jede Variable, die anderen Variablen in möglichen Kombinationen, so dass aber die Bedingungen noch erfüllt sind (also die erste Variable darf alle Werte zwischen deren Min und Max annehmen, je nachdem welchen Wert die erste Variable hat, darf die zweite Variable nur Werte annehmen, die zwischen der jeweiligen Einträge für diese Gruppe liegt).

mfg

Penguin
09.09.2014, 15:00 Uhr - Editiert von Penguin, alte Version: hier
Antworten PM Alle Chronologisch Zum Vorgänger
 
Melden nicht möglich
..  Re(2): rekursives program  (Penguin am 09.09.2014, 15:14:29)
.  Re: rekursives program  (Diabolo2000 am 09.09.2014, 15:59:55)
..  Re(2): rekursives program  (Penguin am 09.09.2014, 16:49:59)
...  Re(3): rekursives program  (Diabolo2000 am 09.09.2014, 17:41:18)
....  Re(4): rekursives program  (Penguin am 10.09.2014, 08:58:50)
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung