/* Ċ Ġ* Ċ Ġ* ĠĠ ĠCopyright Ġ 2 0 2 1 ĠB ud ape st ĠUniversity Ġof ĠTechnology Ġand ĠEconom ics Ċ Ġ* Ċ Ġ* ĠĠ ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* ĠĠ Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠĠ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠĠ ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* ĠĠ Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠĠ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠĠ ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* ĠĠ Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġbenchmark Ċ Ċ import Ġorg . ej ml . simple . Simple Matrix Ċ import Ġsolver . row Ċ import Ġjava . util .* Ċ Ċ fun Ġcomplex Tree String ( num Modules : ĠInt , Ġcontroller Props : Ġ() -> String , Ġvot er Props : Ġ() -> String ): ĠString Ġ{ ĊĠĠĠ Ġval Ġbuilder Ġ= ĠStringBuilder () ĊĠĠĠ Ġbuilder . append ln (" toplevel Ġ\" System \"; ") ĊĠĠĠ Ġval Ġlist Builder Ġ= ĠStringBuilder (" or ") ĊĠĠĠ Ġrepeat ( num Modules ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlist Builder . append (" Ġ\" Module $ it \" ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġbuilder . append ln ("\" System \" Ġ$ list Builder ; ") ĊĠĠĠ Ġbuilder . append ln () ĊĠĠĠ Ġrepeat ( num Modules ) Ġ{ Ġmodule Id Ġ-> ĊĠĠĠĠĠĠĠ Ġbuilder . append ln (" /* ĠModule Ġ$ module Id Ġ*/ ") ĊĠĠĠĠĠĠĠ Ġbuilder . append ln ("\" Module $ module Id \" Ġor Ġ\" Channels $ module Id \" Ġ\" V ot ers $ module Id \"; ") ĊĠĠĠĠĠĠĠ Ġbuilder . append ln ("\" Channels $ module Id \" Ġ 2 of 3 Ġ\" Channel R $ module Id \" Ġ\" Channel G $ module Id \" Ġ\" Channel B $ module Id \"; ") ĊĠĠĠĠĠĠĠ Ġbuilder . append ln ("\" V ot ers $ module Id \" Ġand Ġ\" V oter A $ module Id \" Ġ\" V oter B $ module Id \"; ") ĊĠĠĠĠĠĠĠ Ġbuilder . append ln ("\" Channel R $ module Id \" Ġor Ġ\" IOR $ module Id \" Ġ\" L GR \"; ") ĊĠĠĠĠĠĠĠ Ġbuilder . append ln ("\" Channel G $ module Id \" Ġor Ġ\" IO G $ module Id \" Ġ\" L GG \"; ") ĊĠĠĠĠĠĠĠ Ġbuilder . append ln ("\" Channel B $ module Id \" Ġor Ġ\" IO B $ module Id \" Ġ\" L GB \"; ") ĊĠĠĠĠĠĠĠ Ġbuilder . append ln ("\" IOR $ module Id \" Ġ${ controller Props ()}; ") ĊĠĠĠĠĠĠĠ Ġbuilder . append ln ("\" IO G $ module Id \" Ġ${ controller Props ()}; ") ĊĠĠĠĠĠĠĠ Ġbuilder . append ln ("\" IO B $ module Id \" Ġ${ controller Props ()}; ") ĊĠĠĠĠĠĠĠ Ġbuilder . append ln ("\" V oter A $ module Id \" Ġ${ v oter Props ()}; ") ĊĠĠĠĠĠĠĠ Ġbuilder . append ln ("\" V oter B $ module Id \" Ġ${ v oter Props ()}; ") ĊĠĠĠĠĠĠĠ Ġbuilder . append ln () ĊĠĠĠ Ġ} ĊĠĠĠ Ġbuilder . append ln ("\" L GR \" Ġ${ controller Props ()}; ") ĊĠĠĠ Ġbuilder . append ln ("\" L GG \" Ġ${ controller Props ()}; ") ĊĠĠĠ Ġbuilder . append ln ("\" L GB \" Ġ${ controller Props ()}; ") ĊĠĠĠ Ġreturn Ġbuilder . toString () Ċ } Ċ Ċ fun Ġexp Fixed ( lambda : ĠDouble ): Ġ() Ġ-> ĠString Ġ= Ġ{ Ġ" lambda =$ lambda " Ġ} Ċ fun Ġexp Fixed ( failure Rate : ĠDouble , Ġrepair Rate : ĠDouble ): Ġ() Ġ-> ĠString Ġ= Ġ{ Ġ" lambda =$ failure Rate Ġrepair =$ repair Rate " Ġ} Ċ fun Ġexp Random ( min : ĠDouble , Ġmax : ĠDouble , Ġrandom : ĠRandom ? Ġ= Ġnull ): Ġ() Ġ-> ĠString Ġ{ ĊĠĠĠ Ġval Ġrand Ġ= Ġ( random Ġ?: ĠRandom ()). double s ( min , Ġmax ). iterator () ĊĠĠĠ Ġreturn Ġ{ Ġ" lambda =${ rand . next () }" Ġ} Ċ } Ċ fun Ġmark ov ( rate Matrix : ĠSimple Matrix , Ġnum Failure States : ĠInt ): Ġ() -> String Ġ{ ĊĠĠĠ Ġval Ġph = Ġrate Matrix . matlab Format () ĊĠĠĠ Ġreturn Ġ{ Ġ" ph =$ ph Ġfailure states =$ num Failure States " Ġ} Ċ } Ċ Ċ fun ĠSimple Matrix . matlab Format () Ġ= ĊĠĠĠ Ġ( 0 Ġuntil Ġthis . num Rows ()). map Ġ{ Ġrow ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ( prefix Ġ= Ġ"[", Ġpostfix Ġ= Ġ" ]", Ġseparator Ġ= Ġ"; ") Ġ{ Ġrow Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġrow . num Cols ()). map Ġ{ Ġrow [ it ] Ġ}. join ToString ( separator Ġ= Ġ", ") Ġ{ Ġvalue Ġ-> Ġvalue . toString () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ Ċ fun Ġget Exponent ial Tree ( num Modules : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontroller Failure Rate : ĠDouble , Ġcontroller Repair Rate : ĠDouble , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvot er Failure Rate : ĠDouble , Ġvot er Repair Rate : ĠDouble ) Ġ= ĊĠĠĠĠĠĠĠ Ġcomplex Tree String ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnum Modules , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexp Fixed ( controller Failure Rate , Ġcontroller Repair Rate ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexp Fixed ( v oter Failure Rate , Ġvot er Repair Rate ) ĊĠĠĠĠĠĠĠ Ġ) Ċ Ċ fun Ġconfig Json ( ĊĠĠĠĠĠĠĠ Ġmodel Path : ĠString , ĊĠĠĠĠĠĠĠ Ġmoment : ĠInt , ĊĠĠĠĠĠĠĠ Ġst eady State : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġsolver : ĠString Ġ= Ġ" D MR G ", ĊĠĠĠĠĠĠĠ Ġpre condition er : ĠString Ġ= Ġ" none ", ĊĠĠĠĠĠĠĠ Ġmethod : ĠInt Ġ= Ġ 2 , ĊĠĠĠĠĠĠĠ Ġthreshold : ĠDouble Ġ= Ġ 1 e - 7 , ĊĠĠĠĠĠĠĠ Ġother Options : ĠString ? Ġ= Ġnull Ċ ) Ġ= Ġ""" Ġ{ ĊĠĠĠ Ġ" path " Ġ: Ġ"${ model Path . replace ("\\ ", Ġ" \\\\ ") }", ĊĠĠĠ Ġ" moment " Ġ: Ġ$ moment , ĊĠĠĠ Ġ${ if Ġ( st eady State ) Ġ"\" st eady \" Ġ: Ġtrue ," Ġelse Ġ"" } ĊĠĠĠ Ġ" threshold " Ġ: Ġ$ threshold , ĊĠĠĠ Ġ" solver " Ġ: Ġ"$ solver ", ĊĠĠĠ Ġ" method " Ġ: Ġ$ method , ĊĠĠĠ Ġ" pre condition er " Ġ: Ġ"$ pre condition er " ĊĠĠĠ Ġ${ if Ġ( other Options Ġ!= Ġnull ) Ġ", $ other Options " Ġelse Ġ"" } ĊĠĠĠ Ġ} Ċ """. trim Indent () Ċ Ċ fun Ġconfig Json St eady Only ( ĊĠĠĠĠĠĠĠ Ġmodel Path : ĠString Ċ ) Ġ= Ġ""" Ġ{ ĊĠĠĠ Ġ" path " Ġ: Ġ"${ model Path . replace ("\\ ", Ġ" \\\\ ") }", ĊĠĠĠ Ġ" st eady " Ġ: Ġtrue ĊĠĠĠ Ġ} Ċ """. trim Indent () Ċ Ċ fun Ġconfig Args ( ĊĠĠĠĠĠĠĠ Ġmodel Path : ĠString , ĊĠĠĠĠĠĠĠ Ġmoment : ĠInt , ĊĠĠĠĠĠĠĠ Ġsolver : ĠString Ġ= Ġ" D MR G ", ĊĠĠĠĠĠĠĠ Ġpre condition er : ĠString Ġ= Ġ" none ", ĊĠĠĠĠĠĠĠ Ġmethod : ĠInt Ġ= Ġ 2 , ĊĠĠĠĠĠĠĠ Ġthreshold : ĠDouble Ġ= Ġ 1 e - 7 , ĊĠĠĠĠĠĠĠ Ġst eady : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġother Options : ĠString ? Ġ= Ġnull Ċ ) Ġ= Ġ""" ĊĠĠĠ Ġ-- file =${ model Path . replace ("\\ ", Ġ" \\\\ ")} ĊĠĠĠ Ġ-- moment =$ moment ĊĠĠĠ Ġ-- solver =$ solver ĊĠĠĠ Ġ-- pre condition er =$ pre condition er ĊĠĠĠ Ġ-- threshold =$ threshold ĊĠĠĠ Ġ-- method =$ method ĊĠĠĠ Ġ${ if Ġ( st eady ) Ġ"-- st eady " Ġelse Ġ"" } ĊĠĠĠ Ġ${ other Options Ġ?: Ġ"" } Ċ """. trim Indent () Ċ Ċ fun Ġconfig Args St eady Only ( model Path : ĠString ) Ġ= Ġ""" ĊĠĠĠ Ġ-- file =${ model Path . replace ("\\ ", Ġ" \\\\ ")} Ġ-- st eady Ċ """. trim Indent ()