# 5.1.awk.txt # 12:08 2012/04/30 BEGIN{ # ol[i] : outlay ($1000) : プロジェクトiの支出 # pw[i] : present worth ($1000) : プロジェクトiの現在価値 # npv[i] : net present value : プロジェクトiの正味現在価値 # x[ns,np] : プロジェクトの集合を表す配列 # ns : 集合(set)に付けた番号(number) # np : プロジェクト(project)の番号(number) # x[ns,np]=0 : 集合nsに於いてプロジェクトnpは不採用 # x[ns,np]=1 ; 集合nsに於いてプロジェクトnpは採用 # scost[ns] : 集合nsの支出(cost)の合計 # snpv[ns] : 集合nsの正味現在価値(net present value)の合計 # snpvmax : snpv[ns]の最大値 # ol[1] = 100 ol[2] = 300 ol[3] = 200 ol[4] = 150 ol[5] = 150 pw[1] = 200 pw[2] = 500 pw[3] = 300 pw[4] = 200 pw[5] = 250 for(i=1; i<=5; i++) npv[i] = pw[i] - ol[i] ns=0 snpvmax=0 for(i=0; i<=1; i++){ for(j=0; j<=1; j++){ for(k=0; k<=1; k++){ for(l=0; l<=1; l++){ for(m=0; m<=1; m++){ x[ns,1] = i x[ns,2] = j x[ns,3] = k x[ns,4] = l x[ns,5] = m scost[ns] = ol[1]*x[ns,1] + ol[2]*x[ns,2] + ol[3]*x[ns,3] + ol[4]*x[ns,4] + ol[5]*x[ns,5] snpv[ns] = npv[1]*x[ns,1] + npv[2]*x[ns,2] + npv[3]*x[ns,3] + npv[4]*x[ns,4] + npv[5]*x[ns,5] if(scost[ns]>600) comment[ns]="cost>600" else if(snpv[ns] > snpvmax) { snpvmax = snpv[ns] } ns++ } } } } } for(i=0; i<=31; i++) if(scost[i]<=600 && snpv[i]==snpvmax) comment[i] = "optimal" printf("%5s%5s%5s%5s%5s%5s%5s%5s%10s \n","ns","x1","x2","x3","x4","x5","cost","npv","comment") hr(50) for(i=0; i<=31; i++){ printf("%5i%5i%5i%5i%5i%5i%5i%5i%10s \n", i,x[i,1],x[i,2],x[i,3],x[i,4],x[i,5],scost[i],snpv[i],comment[i]) } hr(50) } function hr(n){ dash ="" for(i=1; i<=n; i++) dash = dash "-" printf("%s\n",dash) } # end