(******************************************************************* This file was generated automatically by the Mathematica front end. It contains Initialization cells from a Notebook file, which typically will have the same name as this file except ending in ".nb" instead of ".m". This file is intended to be loaded into the Mathematica kernel using the package loading commands Get or Needs. Doing so is equivalent to using the Evaluate Initialization Cells menu command in the front end. DO NOT EDIT THIS FILE. This entire file is regenerated automatically each time the parent Notebook file is saved in the Mathematica front end. Any changes you make to this file will be overwritten. ***********************************************************************) BeginPackage["DecisionModels`DecisionModels`"] DecisionMatrix::usage="DecisionMatrix[g,a,b] berechnet die \ Konsequenzen-Matrix der Werte g(x,y) zu gegebenen Strategien x (aus a) und y \ (aus b)." ScaleTransform::usage="ScaleTransform[{a0,b0},{a1,b1}] ist die lineare \ (monoton wachsende) Funktion, die das Intervall [a0;b0] auf das Intervall \ [a1;b1] abbildet." ScaleNorm::usage="ScaleNorm[a,b] ist die Skalentransformation (vgl. \ ScaleTransform), die das Intervall [a;b] auf das Einheitsintervall [0;1] \ abbildet." NormalizeValue::usage="NormalizeValue[x,{xmin,xmax}] berechnet den Wert von x \ unter der Skalentransformation, die das reelle Intervall [xmin;xmax] auf das \ Einheitsintervall [0;1] abbildet." NormalizeRange::usage="NormalizeRange[data] bildet den gesamten Datenbereich \ data durch eine Skalentransformation auf das Einheitsintervall [0;1] ab." NormalizeFunction::usage="NormalizeFunction[f,{a,b}] berechnet die \ Skalen-Normierte der reellen Funktion f \[UDoubleDot]ber dem abgeschlossenen \ Intervall [a;b]." LinUtility::usage="LinUtility[k0,k1,Normalize->False] ist die lineare \ (Nutzen-)funktion u[c]=k0+k1*c. Mit der Option Normalize->{a,b} wird die \ Skalen-Normierte \[UDoubleDot]ber dem Intervall [a;b] ausgegeben." QuadUtility::usage="QuadUtility[k0,k1,k2] ist die quadratische \ (Nutzen-)Funktion u[c]=k0+k1*c+k2*c^2." ExpUtility::usage="ExpUtility[k0,k1,k2] ist die exponentielle \ (Nutzen-)Funktion u[c]=k0+k1*Exp[k2*c]." LogUtility::usage="LogUtility[k0,k1] ist die (Nutzen-)Funktion \ u[c]=k0+k1*Log[c]. Mit der Option Normalize->{a,b} wird die Skalen-Normierte \ \[UDoubleDot]ber dem Intervall [a;b] (0b0,h=a0;a0=b0;b0=h]; If[a1>b1,h=a1;a1=b1;b1=h]; If[a0\[NotEqual]b0, Function[x,x*(b1-a1)/(b0-a0)+(a1*b0-a0*b1)/(b0-a0)]] ] ScaleNorm[a_/;NumberQ[a],b_/;NumberQ[b]]:=ScaleTransform[{a,b},{0,1}] NormalizeValue[x_/;NumberQ[x],{xmin_/;NumberQ[xmin],xmax_/;NumberQ[xmax]}]:= ScaleNorm[xmin,xmax][x] NormalizeRange[data_List]:=Module[{datamin=Min[data],datamax=Max[data]}, ScaleNorm[datamin,datamax][data] ] NormalizeFunction[f_,{a_/;NumberQ[a],b_/;NumberQ[b]}]:= Module[{n,s,h,valmin,valmax}, If[a>b,h=a;a=b;b=h]; n=Ceiling[4+Log[b-a]/Log[10]]; s=(b-a)*10^(-n); vals=Table[f[a+j*s],{j,0,10^n}]; {valmin,valmax}={Min[vals],Max[vals]}; Function[x,(f[x]-valmin)/(valmax-valmin)] ] LinUtility[k0_/;NumberQ[k0],k1_/;NumberQ[k1],opts___?OptionQ]:= Module[{h,opt,a,b,nm=False}, opt=UtilityFunctionOpt[opts]; If[opt[[1]],{a,b}=opt[[2]];nm=True]; If[nm\[Equal]False||a\[Equal]b,Function[x,k0+k1*x], If[a>b,h=a;a=b;b=h]; Which[ k1>0,Function[x,(x-a)/(b-a)], k1<0,Function[x,(x-b)/(a-b)], k1\[Equal]0, If[k0>0,Function[x,1],Function[x,0]] ]] ] QuadUtility[k0_/;NumberQ[k0],k1_/;NumberQ[k1],k2_/;NumberQ[k2], opts___?OptionQ]:=Module[{h,opt,a,b,xm,nm=False,ufkt}, opt=UtilityFunctionOpt[opts]; If[opt[[1]],{a,b}=opt[[2]];nm=True]; ufkt=Function[x,k0+k1*x+k2*x^2]; If[nm\[Equal]False||a\[Equal]b,ufkt, If[a>b,h=a;a=b;b=h]; If[k2\[NotEqual]0,xm=-k1/(2*k2),Return[ufkt]]; Which[ (k2>0)&&(a\[GreaterEqual]xm),xmin=a;xmax=b, (k2>0)&&(b\[LessEqual] xm),xmin=b;xmax=a, (k2>0)&&(aufkt[b],a,b], (k2<0)&&(a\[GreaterEqual]xm),xmin=b;xmax=a, (k2<0)&&(b\[LessEqual] xm),xmin=a;xmax=b, (k2<0)&&(ab,h=a;a=b;b=h]; Which[ k1*k2>0,Function[x,(ufkt[x]-ufkt[a])/(ufkt[b]-ufkt[a])], k1*k2<0,Function[x,(ufkt[x]-ufkt[b])/(ufkt[a]-ufkt[b])] ]] ] LogUtility[k0_/;NumberQ[k0],k1_/;NumberQ[k1],opts___?OptionQ]:= Module[{h,opt,a,b,nm=False}, opt=UtilityFunctionOpt[opts]; If[opt[[1]],{a,b}=opt[[2]];nm=True]; If[(nm\[Equal]False)||(a\[LessEqual] 0)||(b\[LessEqual] 0), Function[x,k0+k1*Log[x]], If[a>b,h=a;a=b;b=h]; Which[ k1>0,Function[x,(Log[x]-Log[a])/(Log[b]-Log[a])], k1<0,Function[x,(Log[x]-Log[b])/(Log[a]-Log[b])] ]] ] SqrtUtility[k0_/;NumberQ[k0],k1_/;NumberQ[k1],opts___?OptionQ]:= Module[{h,opt,a,b,nm=False}, opt=UtilityFunctionOpt[opts]; If[opt[[1]],{a,b}=opt[[2]];nm=True]; If[(nm\[Equal]False)||(a< 0)||(b< 0),Function[x,k0+k1*Sqrt[x]], If[a>b,h=a;a=b;b=h]; Which[ k1>0,Function[x,(Sqrt[x]-Sqrt[a])/(Sqrt[b]-Sqrt[a])], k1<0,Function[x,(Sqrt[x]-Sqrt[b])/(Sqrt[a]-Sqrt[b])] ]] ] CompoundUtility[scores_List/;VectorQ[scores,NumberQ], maxscore_/;NumberQ[maxscore],weights_List/;VectorQ[weights,NumberQ]]:= (scores/maxscore).(weights/Plus@@weights) PresentValue[c_List/;VectorQ[c,NumberQ],q_List]:=Module[{df=1,gpv=c[[1]]}, If[Length[q]\[GreaterEqual]Length[c]-1, Do[df=df*q[[j-1]];gpv=gpv+c[[j]]/df,{j,2,Length[c]}]; gpv ] ] PresentValueAtRate[c_List/;VectorQ[c,NumberQ],r_]:= PresentValue[c,Table[1+r,{Length[c]-1 }]] PresentValueGraph[c_List/;VectorQ[c,NumberQ],rmin_/;NumberQ[rmin], rmax_/;NumberQ[rmax],opts___?OptionQ]:=Module[{pstyle}, pstyle=PlotStyle/.{opts}/.Options[PresentValueGraph]; Plot[PresentValueAtRate[c,r],{r,rmin,rmax},PlotStyle\[Rule]pstyle]; ] InterestRatePoly[c_List]:= Function[r,Simplify[Expand[PresentValueAtRate[c,r](1+r)^(Length[c]-1)]]] InterestRateRealZeros[c_List/;VectorQ[c,NumberQ]]:= Cases[r/.NSolve[InterestRatePoly[c][r]\[Equal]0,r],_Real] InternalRate[c_List/;VectorQ[c,NumberQ],rstart_:0]:= r/.FindRoot[PresentValueAtRate[c,r]\[Equal]0,{r,rstart}] PositiveInvestmentQ[ c_List/;Plus@@N[c]>0]:=(SignChanges[TransformedCashflow[c]]==1) HurwiczValue[u_List/;VectorQ[u,NumberQ],lambda_/;NumberQ[lambda]]:= lambda*Max[u]+(1-lambda)*Min[u] HurwiczSolve[u_List/;MatrixQ[u,NumberQ],lambda_/;NumberQ[lambda]]:= Module[{uhurwtab}, uhurwtab=Table[HurwiczValue[u[[i]],lambda],{i,1,Length[u]}]; DisplaySolutions[uhurwtab] ] MaximinSolve[u_List/;MatrixQ[u,NumberQ]]:=HurwiczSolve[u,0] MaximaxSolve[u_List/;MatrixQ[u,NumberQ]]:=HurwiczSolve[u,1] RegretMatrix[u_List/;MatrixQ[u,NumberQ]]:=Module[{usterntab,utrans}, utrans=Transpose[u]; usterntab=Table[Max[utrans[[j]]],{j,1,Length[utrans]}]; Table[u[[i]]-usterntab,{i,1,Length[u]}] ] SavageSolve[u_List/;MatrixQ[u,NumberQ]]:=Module[{rm,regmintab}, rm=RegretMatrix[u]; regmintab=Table[Min[rm[[i]]],{i,1,Length[rm]}]; DisplaySolutions[regmintab] ] Expectation[c_List/;VectorQ[N[c],NumberQ],prob_List/;Plus@@prob\[Equal]1]:= N[c].N[prob] ExpectedUtility[u_,c_,prob_]:=Expectation[u[N[c]],prob] BernoulliSolve[u_List/;MatrixQ[u,NumberQ],prob_List]:=Module[{uexvaltab}, uexvaltab=Table[Expectation[u[[i]],prob],{i,1,Length[u]}]; DisplaySolutions[uexvaltab] ] LaplaceSolve[u_List/;MatrixQ[u,NumberQ]]:=Module[{n=Length[Transpose[u]]}, BernoulliSolve[u,Table[1/n,{n}]] ] CertaintyEquivalent[u_,{cmin_,cmax_},c_List/;VectorQ[c,NumberQ],prob_List]:= x/.FindRoot[ u[x]\[Equal]ExpectedUtility[u,c,prob],{x,(cmin+cmax)/2,cmin,cmax}] RiskPremium[u_,{cmin_,cmax_},c_,prob_]:= Expectation[c,prob]-CertaintyEquivalent[u,{cmin,cmax},c,prob] AbsoluteRiskFunction[u_]:=Function[x,-D[u[x],{x,2}]/D[u[x],x]] RelativeRiskFunction[u_]:=Function[x,-D[u[x],{x,2}]*x/D[u[x],x]] ReduceLines[m_List]:=Module[{mat=m,dpl,dplall={}}, Do[ dpl=DominationPositionList[mat[[i]],mat]; dpl=Select[dpl,#\[NotEqual] {i}&]; dplall=Union[dplall,dpl], {i,1,Length[mat]} ]; Return[Delete[mat,dplall]] ] ReduceColumns[m_List]:=Module[{mat=-m}, -Transpose[ReduceLines[Transpose[mat]]] ] MaximinSet[g_List/;MatrixQ[g,NumberQ]]:=Module[{alphav,alphatab}, alphatab=Table[Min[g[[i]]],{i,1,Length[g]}]; alphav=Max[alphatab]; alphaposlist=Flatten[Position[alphatab,alphav]]; {alphav,alphaposlist} ] MinimaxSet[g_List/;MatrixQ[g,NumberQ]]:=Module[{betav,betatab}, betatab=Table[Max[Transpose[g][[j]]],{j,1,Length[Transpose[g]]}]; betav=Min[betatab]; betaposlist=Flatten[Position[betatab,betav]]; {betav,betaposlist} ] SaddlepointSolution[g_]:=Module[{ma,mi,vals,v}, mi=MinimaxSet[g]; ma=MaximinSet[g]; vals=Union[{First[mi],First[ma]}]; If[Length[vals]\[Equal]1,{vals[[1]], Flatten[Outer[List,Flatten[Rest[mi]],Flatten[Rest[ma]]],1]},{}] ] MixedStrategySolution[g_]:= Module[{ga=Transpose[g],gb=-g, psa,psb,va,vb,a1,b1,x,y}, (* Spielmatrizen positiv machen *) psa=PositiveShift[ga]; psb=PositiveShift[gb]; ga=ga+psa; gb=gb+psb; (* rechte Seiten f\[UDoubleDot]r die Ungleichungen *) a1=Table[1,{Length[ga]}]; b1=Table[1,{Length[gb]}]; (* L\[ODoubleDot]sungen f\[UDoubleDot]r Spieler A und B *) x=LinearProgramming[b1,ga,a1]; y=LinearProgramming[a1,gb,b1]; va=(1/Plus@@x);vb=(1/Plus@@y); (* Wert des Spiels, Strategie A, Strategie B *) {va-psa,x*va,y*vb} ] End[ ] Protect["UtilityFunctionOpt","DisplaySolutions","Expectation","SignChanges","DecisionMatrix","ScaleTransform","ScaleNorm","NormalizeValue","NormalizeRange","NormalizeFunction","LinUtility","QuadUtility","ExpUtility","LogUtility","SqrtUtility","PresentValue","PresentValueAtRate","PresentValueGraph","InterestRatePoly","InterestRateRealZeros","InternalRate","PositiveInvestmentQ","TransformedCashflow","HurwiczValue","HurwiczSolve","MaximinSolve","MaximaxSolve","RegretMatrix","SavageSolve","ExpectedUtility","BernoulliSolve","LaplaceSolve","CertaintyEquivalent","RiskPremium","AbsoluteRiskFunction","RelativeRiskFunction","DominatesQ","DominationList","DominationPositionList","PositiveShift","ReduceLines","ReduceColumns","ReduceAll","MaximinSet","MinimaxSet","SaddlepointSolution","MixedStrategySolution"] EndPackage[]