{VERSION 5 0 "IBM INTEL NT" "5.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "" -1 256 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 257 "" 1 24 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{PSTYLE "Normal " -1 0 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }1 1 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Maple Plot" -1 13 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }3 1 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Normal" -1 256 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }3 1 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Normal" -1 257 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }3 1 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Normal" -1 258 1 {CSTYLE "" -1 -1 "T imes" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }3 1 0 0 0 0 1 0 1 0 2 2 0 1 } } {SECT 0 {EXCHG {PARA 256 "" 0 "" {TEXT -1 0 "" }{TEXT 256 0 "" }{TEXT 257 25 "Artificial Neural Network" }}{PARA 257 "" 0 "" {TEXT -1 16 "By Sylvain Muise" }}{PARA 258 "" 0 "" {TEXT -1 19 "smuise@uwaterloo.ca" }}{PARA 0 "" 0 "" {TEXT -1 38 "This Maple simulates a neural network. " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "restart:" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 39 "with(Maplets): with(Maplets[Elements]):" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 55 "rnd := proc()\n 0.1*evalf(r and()/10^12)-0.05:\nend proc:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 383 "makeNetwork := proc(nVars)\n local w1, w2, nHidden, i, j, temp :\n nHidden := 2^(nVars):\n w1 := []:\n w2 := Vector([]):\n for i \+ from 1 to nHidden do\n temp := Vector([]):\n for j from 1 to (nV ars + 1) do\n temp := Vector([op(convert(temp,list)),rnd()]):\n \+ end do:\n w1 := [op(w1),temp]:\n w2 := Vector([op(convert(w2,l ist)),rnd()]):\n end do:\n [nVars,w1,w2];\nend proc:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 159 "perceptron := proc(w, x)\n local \+ res:\n res := LinearAlgebra:-DotProduct(w,x):\n if res > 0 then\n \+ res := 1:\n else\n res := -1:\n end if:\n res:\nend proc:" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 1033 "getValue := proc(network:: list, Data_Point::list, ROUNDOFF::truefalse, returnHidden::truefalse) \n local nVars, nHidden, w1, w2, i, data_point, outputHidden, outputH iddenV, roundOff, output, ret, input:\n nVars := network[1]:\n data_ point := Vector(Data_Point):\n nHidden := 2^(nVars):\n w1 := network [2]:\n w2 := network[3]:\n if nargs = 2 then roundOff := true: else \+ roundOff := ROUNDOFF: end if:\n outputHidden := []:\n input := [op(c onvert(data_point,list)), 1]:\n for i from 1 to nops(input) do\n i nput[i] := evalf(( input[i] * 2 ) - 1):\n end do:\n input := Vector( input):\n for i from 1 to nHidden do\n outputHidden := [op(outputH idden),perceptron(w1[i],input)]:\n end do:\n outputHiddenV := Vector (outputHidden):\n output := LinearAlgebra:-DotProduct(w2,outputHidden V):\n ret := []:\n if nargs = 3 or nargs = 2 then\n if roundOff t hen\n ret := round(evalf((output+1)/2)):\n else\n ret := \+ evalf(( output + 1 ) / 2):\n end if:\n elif nargs = 4 then\n re t := [outputHidden, output]:\n end if:\n ret:\nend proc:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 363 "listAll := proc(network::list, rou ndOff)\n local nVars, testVectors, i, ret:\n nVars := network[1]:\n \+ ret := []:\n testVectors := makeTestVectors(nVars):\n for i from 1 \+ to 2^nVars do\n if nargs = 1 then\n ret := [op(ret),getValue(N ,testVectors[i])]:\n else\n ret := [op(ret),getValue(N,testVec tors[i],roundOff)]:\n end if:\n end do:\n ret:\nend proc:" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 61 "rnd2 := proc(n)\n floor(n*e valf(rand()/10^12)) + 1;\nend proc:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 510 "makeTestVectors := proc(nVars)\n local nHidden, tmp , tmp2, res, ret, i, j:\n nHidden := 2^(nVars):\n ret := []:\n for \+ i from 1 to nHidden do\n res := []:\n tmp := convert(convert(nHi dden - i, binary),string):\n while length(tmp) < nVars do\n tm p := cat(\"0\",tmp):\n end do:\n for j from 1 to nVars do\n \+ tmp2 := parse(StringTools:-SubString(tmp,1..1)):\n res := [op(re s),tmp2]:\n tmp := StringTools:-SubString(tmp,2..-1):\n end do :\n ret := [op(ret),res]:\n end do:\n ret:\nend proc:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 1189 "trainNetwork := proc(network::lis t,dataset::list, n::integer, learning_rate)\n local nVars, nHidden, w 1, w2, testVectors, k, r, i, j, input, exOutput, networkOutput, hidden Output, errorHidden, errorOutput, returnNetwork:\n nVars := network[1 ]:\n nHidden := 2^(nVars):\n w1 := network[2]:\n w2 := network[3]: \n testVectors := makeTestVectors(nVars):\n returnNetwork := [nVars, w1,w2]:\n for k from 1 to n do\n r := rnd2(nHidden):\n input := testVectors[r]:\n exOutput := evalf((dataset[r] * 2)-1):\n netw orkOutput := getValue(returnNetwork, input, false,true):\n hiddenOu tput := networkOutput[1]:\n networkOutput := networkOutput[2]:\n \+ errorOutput := (exOutput - networkOutput):\n errorHidden := []:\n \+ for i from 1 to nHidden do\n errorHidden := [op(errorHidden),w 2[i]*errorOutput]:\n for j from 1 to nVars do\n w1[i][j] : = w1[i][j] + learning_rate * errorHidden[i] * (evalf((input[j]*2)-1)): \n end do:\n w2[i] := w2[i] + learning_rate * errorOutput * \+ hiddenOutput[i]:\n end do:\n returnNetwork := [nVars,w1,w2]:\n \+ updateActual(returnNetwork):\n if updateError(returnNetwork) then \n k := n:\n end if:\n end do:\n returnNetwork:\nend proc:" }{TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 607 "makeDataS et := proc(network, blnStr)\n local nVars, nHidden, execStr, i, j, te stVectors, ret:\n nVars := network[1]:\n nHidden := 2^(nVars):\n te stVectors := makeTestVectors(nVars):\n ret := []:\n for i from 1 to \+ nHidden do\n execStr := blnStr:\n for j from 1 to nVars do\n \+ if testVectors[i][j] = 1 then testVectors[i][j] := \"true\":\n \+ else testVectors[i][j] := \"false\": end if:\n execStr := StringT ools:-SubstituteAll(execStr,\"v\"||j,testVectors[i][j]):\n end do: \n if parse(execStr) then\n ret := [op(ret),1]:\n else\n \+ ret := [op(ret),0]:\n end if:\n end do:\n ret:\nend proc:" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 1032 "drawNetwork := proc(networ k)\n local nVars, nHidden, redDots, greenDots, blueDot, i, j, redLine s, blueLines, r:\n nVars := network[1]:\n if nVars = 1 then r := 0.1 : else r := 0.35: end if:\n nHidden := 2^(nVars):\n redDots := []: g reenDots := []: redLines := []: blueLines := []:\n for i from 1 to nV ars do\n redDots := [op(redDots),plottools[disk]([-nHidden/4,i-(nVa rs+1)/2],r,color=red)]:\n for j from 1 to nHidden do\n redLine s := [op(redLines),plottools[line]([-nHidden/4,i-(nVars+1)/2],[0,j-(nH idden+1)/2],color=red)]:\n end do:\n end do:\n for i from 1 to nH idden do\n greenDots := [op(greenDots),plottools[disk]([0,i-(nHidde n+1)/2],r,color=green)]:\n blueLines := [op(blueLines),plottools[li ne]([0,i-(nHidden+1)/2],[nHidden/4,0],color=blue)]:\n end do:\n blue Dot := plottools[disk]([nHidden/4,0],r,color=blue):\n plots[display]( seq(redLines[i],i=1..nops(redLines)),seq(blueLines[i],i=1..nops(blueLi nes)),seq(redDots[i],i=1..nVars),seq(greenDots[i],i=1..nHidden),blueDo t,scaling=constrained,axes=none);\nend proc:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 36 "q := proc(n)\n floor(n/2):\nend proc:" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 33 "r := proc(n)\n n mod 2;\nen d proc:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 3675 "drawNetwork3D \+ := proc(network, th, ph)\n local nHidden, greenDots, nVars, i, j, k, \+ sideN,sideHole,symSiz, redLines, greenLines:\n nVars := network[1]:\n symSiz := 100:\n nHidden := 2^(nVars):\n greenDots := []:\n redLi nes := []:\n greenLines := []:\n if nHidden = 2 then\n greenDots \+ := [plottools[point]([-0.5,0,0],color=green,symbol=cross,symbolsize=sy mSiz),plottools[point]([0.5,0,0],color=green,symbol=cross,symbolsize=s ymSiz)]:\n redLines := [plottools[line]([0,0,-sqrt(2)],[-0.5,0,0],c olor=red),plottools[line]([0,0,-sqrt(2)],[0.5,0,0],color=red)]:\n g reenLines := [plottools[line]([-0.5,0,0],[0,0,sqrt(2)],color=green),pl ottools[line]([0.5,0,0],[0,0,sqrt(2)],color=green)]:\n elif nVars mod 2 = 0 then\n sideN := 2^(nVars/2):\n symSiz := floor(350 / side N):\n for i from 1 to sideN do\n for j from 1 to sideN do\n \+ greenDots := [op(greenDots),plottools[point]([-(sideN/2)+0.5 + (i -1), -(sideN/2)+0.5 + (j - 1), 0],color=green,symbol=cross,symbolsize= symSiz)]:\n greenLines := [op(greenLines),plottools[line]([-(si deN/2)+0.5 + (i-1), -(sideN/2)+0.5 + (j - 1), 0],[0,0,sqrt(nHidden)],c olor=green)]:\n for k from 1 to nVars do\n redLines := [op(redLines),plottools[line]([-(0.5) + r(k-1), -(q(nVars - 1) * 0.5) + q(k-1), -sqrt(nHidden)],[-(sideN/2)+0.5 + (i-1), -(sideN/2)+0.5 + ( j-1), 0],color=red)]:\n end do:\n end do:\n end do:\n \+ else\n sideN := 2^((nVars - 3)/2)*3:\n sideHole := sqrt(sideN^2 \+ - nHidden):\n symSiz := floor(350 / sideN):\n for i from 1 to si deN do\n for j from 1 to sideHole do\n greenDots := [op(gr eenDots),plottools[point]([-(sideN/2)+0.5+(i-1), -(sideN/2)+0.5+(j-1), 0],color=green,symbol=cross,symbolsize=symSiz),plottools[point]([-(sid eN/2)+0.5+(i-1), sideHole/2 + 0.5 + (j-1),0],color=green,symbol=cross, symbolsize=symSiz)]:\n greenLines := [op(greenLines),plottools[ line]([-(sideN/2)+0.5+(i-1), -(sideN/2)+0.5+(j-1),0],[0,0,sqrt(nHidden )],color=green),plottools[line]([-(sideN/2)+0.5+(i-1), sideHole/2 + 0. 5 + (j-1),0],[0,0,sqrt(nHidden)],color=green)]:\n for k from 1 \+ to nVars do\n redLines := [op(redLines),plottools[line]([-0.5 + r(k-1), -(q(nVars - 1) * 0.5) + q(k-1), -sqrt(nHidden)],[-(sideN/2) +0.5+(i-1), -(sideN/2)+0.5+(j-1),0],color=red),plottools[line]([-0.5 + r(k-1), -(q(nVars - 1) * 0.5) + q(k-1), -sqrt(nHidden)],[-(sideN/2)+0 .5+(i-1), sideHole/2 + 0.5 + (j-1),0],color=red)]:\n end do:\n \+ end do:\n end do:\n for i from 1 to sideHole do\n for \+ j from 1 to sideHole do\n greenDots := [op(greenDots),plottools [point]([-(sideN/2)+0.5+(i-1), -(sideHole/2) + 0.5 + (j-1),0],color=gr een,symbol=cross,symbolsize=symSiz),plottools[point]([sideHole/2 + 0.5 + (i-1), -(sideHole/2) + 0.5 + (j-1), 0],color=green,symbol=cross,sym bolsize=symSiz)]:\n greenLines := [op(greenLines),plottools[lin e]([-(sideN/2)+0.5+(i-1), -(sideHole/2) + 0.5 + (j-1),0],[0,0,sqrt(nHi dden)],color=green),plottools[line]([sideHole/2 + 0.5 + (i-1), -(sideH ole/2) + 0.5 + (j-1), 0],[0,0,sqrt(nHidden)],color=green)]:\n f or k from 1 to nVars do\n redLines := [op(redLines),plottools [line]([-0.5 + r(k-1), -(q(nVars - 1) * 0.5) + q(k-1), -sqrt(nHidden)] ,[-(sideN/2)+0.5+(i-1), -(sideHole/2) + 0.5 + (j-1),0],color=red),plot tools[line]([-0.5 + r(k-1), -(q(nVars - 1) * 0.5) + q(k-1), -sqrt(nHid den)],[sideHole/2 + 0.5 + (i-1), -(sideHole/2) + 0.5 + (j-1), 0],color =red)]:\n end do:\n end do:\n end do:\n end if:\n plo ts[display](seq(greenDots[i],i=1..nops(greenDots)),seq(redLines[i],i=1 ..nops(redLines)),seq(greenLines[i],i=1..nops(greenLines)),axes=none,s tyle=patchnogrid,scaling=constrained,orientation=[th,ph]);\nend proc: " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 5602 "N := makeNetwork(2): \n\nFmakeNew := proc()\n global N:\n local n, bln3D:\n n := parse(M aplets:-Tools:-Get(TFnVars)):\n N := makeNetwork(n):\n bln3D := pars e(Maplets:-Tools:-Get(CB3d)):\n updateActual(N):\n clearExpected(): \n clearError():\n if bln3D then\n drawNetwork3D(N, 50, 68):\n e lse\n drawNetwork(N):\n end if:\nend proc:\n\nFgetValue := proc() \n global N:\n local input, blnRound:\n input := [parse(Maplets:-To ols:-Get(TFinput))]:\n blnRound := parse(Maplets:-Tools:-Get(CBroundO ff)):\n getValue(N,input,blnRound):\nend proc:\n\nFtrain := proc()\n \+ global N:\n local tStr, t, n, rate:\n tStr := Maplets:-Tools:-Get(T FblnStr):\n t := makeDataSet(N,tStr):\n Maplets:-Tools:-Set(TBexOut \+ = convert(t,string)):\n rate := parse(Maplets:-Tools:-Get(TFrate)):\n n := parse(Maplets:-Tools:-Get(TFn)):\n N := trainNetwork(N,t,n,rat e):\nend proc:\n\ncalError := proc(start)\n global N:\n local tStr,t ,output,ret,i,blnRnd:\n if nargs = 1 and start then\n tStr := \"v1 or v2\":\n blnRnd := true:\n else\n tStr := Maplets:-Tools:-Ge t(TFblnStr):\n blnRnd := parse(Maplets:-Tools:-Get(CBrndOffError)): \n end if:\n t := makeDataSet(N,tStr):\n output := listAll(N, blnRn d):\n ret := []:\n for i from 1 to nops(output) do\n if blnRnd th en\n ret := [op(ret),round(output[i])-round(t[i])]:\n else\n \+ ret := [op(ret),output[i]-t[i]]:\n end if:\n end do:\n ret:\n end proc:\n\nupdateError := proc(network)\n local tStr,t,output,ret,i ,blnRnd, finished:\n tStr := Maplets:-Tools:-Get(TFblnStr):\n blnRnd := parse(Maplets:-Tools:-Get(CBrndOffError)):\n t := makeDataSet(net work,tStr):\n output := listAll(network,blnRnd):\n finished := true: \n ret := []:\n for i from 1 to nops(output) do\n if blnRnd then \n ret := [op(ret),round(output[i])-round(t[i])]:\n else\n \+ ret := [op(ret),output[i]-t[i]]:\n end if:\n if not (round(out put[i]) - round(t[i]) = 0) then\n finished := false:\n end if: \n end do: \n Maplets:-Tools:-Set(TBerror = convert(ret,string)):\n \+ finished: \nend proc:\n\nupdateActual := proc(network)\n local blnRn d:\n blnRnd := parse(Maplets:-Tools:-Get(CBrndOffError)):\n Maplets: -Tools:-Set(TBacOut = convert(listAll(network,blnRnd),string)):\nend p roc:\n\nclearExpected := proc()\n Maplets:-Tools:-Set(TBexOut = \"\") :\nend proc:\n\nclearError := proc()\n Maplets:-Tools:-Set(TBerror = \+ \"\"):\nend proc:\n\nann := Maplet(\n Window[W1](title=\"ANN\", menub ar=MB1, 'layout' = BL1),\n MenuBar[MB1](Menu(\"File\", MenuItem(\"Clo se\", Shutdown()))),\n BoxLayout[BL1](inset=0,\n BoxColumn(inset=0 ,spacing=0,\n BoxRow(inset=0,spacing=0,\n Plotter['P1'](va lue = drawNetwork(N))\n ),\n BoxRow(inset=0, spacing=0,\n \+ BoxColumn(inset=0,spacing=0,\n BoxRow(inset=0,spacing=0, \n Label(\"Expected Output: \",font=Font(\"courier\",size=1 2)),\n TextBox[TBexOut](editable=false,font=Font(\"courier \",size=12),width=35,height=3, \"[1, 1, 1, 0]\")\n ),\n \+ BoxRow(inset=0,spacing=0,\n Label(\"Actual Output: \" ,font=Font(\"courier\",size=12)),\n TextBox[TBacOut](editab le=false,font=Font(\"courier\",size=12),width=35,height=3,value=listAl l(N))\n ),\n BoxRow(inset=0,spacing=0,\n \+ Label(\"Error: \",font=Font(\"courier\",size=12)),\n \+ TextBox[TBerror](editable=false,font=Font(\"courier\",size=12),wid th=35,height=3,value=calError(true))\n ),\n BoxRow(i nset=0,spacing=0,\n CheckBox[CBrndOffError](value=true,capt ion=\"Round Off: \",font=Font(\"courier\",size=12))\n )\n \+ )\n )\n ),\n BoxColumn(inset=0,spacing=0,\n BoxRow (inset=0,spacing=0,border=true,caption=\"Make a new Network\",\n \+ Button[BmakeNew](\"Create Network\",onclick=AmakeNew),\n \" \+ Number of Variables: \",\n TextField[TFnVars](4,\"2\",halign= right),\n CheckBox[CB3d](false,caption=\"3D\")\n ),\n \+ BoxRow(inset=0,spacing=0,border=true,caption=\"Train the network\",\n BoxColumn(inset=0,spacing=0,\n BoxRow(inset=0,spacing =0,\n \"Enter a boolean function using v1,v2,... as the var iables\"\n ),\n BoxRow(inset=0,spacing=0,\n \+ TextField[TFblnStr](15,\"v1 or v2\",halign=right)\n ),\n \+ BoxRow(inset=0,spacing=0,\n \"Enter the learning ra te: \",\n TextField[TFrate](4,\"0.05\",halign=right)\n \+ ),\n BoxRow(inset=0,spacing=0,\n \"Enter the \+ number of times to train: \",\n TextField[TFn](4,\"200\",ha lign=right)\n ),\n BoxRow(inset=0,spacing=0,\n \+ Button[Btrain](\"Train\",onclick=Atrain)\n )\n ) \n ),\n BoxRow(inset=0,spacing=0,border=true,caption=\"Input a vector\",\n BoxColumn(inset=0,spacing=0,\n BoxRow(i nset=0,spacing=0,\n BoxColumn(inset=0,spacing=0,\n \+ \"Input a list of numbers, separated by commas,\",\n \+ \"representing the values of the input variables.\",\n \+ \"Ex.: 0,1,0,0,1 for an input vector of 5 variables\"\n )\n ),\n BoxRow(inset=0,spacing=0,\n TextFie ld[TFinput](10,\"1,0\",halign=right)\n ),\n BoxRow(i nset=0,spacing=0,\n Button[BgetValue](\"Get Value\",onclick =AgetValue),\n \" \",\n CheckBox[CBroundOff](c aption=\"Round Off\",value=true)\n ),\n BoxRow(inset =0,spacing=0,\n \"Result: \",\n TextField[TFres ult](10,editable=false,halign=right)\n )\n )\n ) \n )\n ),\n Action[AmakeNew](Evaluate('P1' = 'FmakeNew()')),\n A ction[AgetValue](Evaluate(TFresult = 'FgetValue()')),\n Action[Atrain ](Evaluate(function = 'Ftrain()'))\n):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "Display(ann);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "drawNetwork3D(N,90,90);" }}{PARA 13 "" 1 "" {GLPLOT3D 400 300 300 {PLOTDATA 3 "6N-%'POINTSG6%7%$!+++++5!\"*F'$\"\"!F+-%'COLOURG6&%$R GBGF*$\"*++++\"!\")F*-%'SYMBOLG6$%&CROSSG\"$;\"-F$6%7%F'$\"\"\"F+F*F,F 3-F$6%7%F*F'F*F,F3-F$6%7%F*F;F*F,F3-F$6%7%$\"+++++5F)F'F*F,F3-F$6%7%FF F;F*F,F3-F$6%7%F'F*F*F,F3-F$6%7%F;F*F*F,F3-%'CURVESG6$7$7%$!\"&!\"\"FV $!+CrUGGF)F&-F-6&F/F0F*F*-FR6$7$FUF:Fen-FR6$7$7%$\"\"&FXFVFYF&Fen-FR6$ 7$F]oF:Fen-FR6$7$7%FVF^oFYF&Fen-FR6$7$FfoF:Fen-FR6$7$FUF?Fen-FR6$7$FUF BFen-FR6$7$F]oF?Fen-FR6$7$F]oFBFen-FR6$7$FfoF?Fen-FR6$7$FfoFBFen-FR6$7 $FUFEFen-FR6$7$FUFJFen-FR6$7$F]oFEFen-FR6$7$F]oFJFen-FR6$7$FfoFEFen-FR 6$7$FfoFJFen-FR6$7$FUFMFen-FR6$7$FUFPFen-FR6$7$F]oFMFen-FR6$7$F]oFPFen -FR6$7$FfoFMFen-FR6$7$FfoFPFen-FR6$7$F&7%F*F*$\"+CrUGGF)F,-FR6$7$F:Fcs F,-FR6$7$F?FcsF,-FR6$7$FBFcsF,-FR6$7$FEFcsF,-FR6$7$FJFcsF,-FR6$7$FMFcs F,-FR6$7$FPFcsF,-%&STYLEG6#%,PATCHNOGRIDG-%(SCALINGG6#%,CONSTRAINEDG-% *AXESSTYLEG6#%%NONEG-%+PROJECTIONG6%$\"#!*F+FjuF<" 1 3 0 1 10 0 2 1 1 1 1 1.000000 68.000000 51.000000 1 0 "Curve 1" "Curve 2" "Curve 3" "Cu rve 4" "Curve 5" "Curve 6" "Curve 7" "Curve 8" "Curve 9" "Curve 10" "C urve 11" "Curve 12" "Curve 13" "Curve 14" "Curve 15" "Curve 16" "Curve 17" "Curve 18" "Curve 19" "Curve 20" "Curve 21" "Curve 22" "Curve 23 " "Curve 24" "Curve 25" "Curve 26" "Curve 27" "Curve 28" "Curve 29" "C urve 30" "Curve 31" "Curve 32" "Curve 33" "Curve 34" "Curve 35" "Curve 36" "Curve 37" "Curve 38" "Curve 39" "Curve 40" }}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "0 3 0" 38 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }