/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 ĠJetBrains Ġs . r . o . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠMIT Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ* Ċ Ġ* ĠThis Ġfile Ġhas Ġbeen Ġmodified Ġby ĠJetBrains Ġ: ĠJava Ġcode Ġhas Ġbeen Ġconverted Ġto ĠKotlin Ġcode . Ċ Ġ* Ċ Ġ* ĠTHE ĠFOL LOW ING ĠIS ĠTHE ĠCOPYRIGHT ĠOF ĠTHE ĠOR IGIN AL ĠDOCUMENT : Ċ Ġ* Ċ Ġ* ĠLicensed Ġto Ġthe ĠApache ĠSoftware ĠFoundation Ġ( ASF ) Ġunder Ġone Ġor Ġmore Ċ Ġ* Ġcontributor Ġlicense Ġagreements . Ġ ĠSee Ġthe ĠNOTICE Ġfile Ġdistributed Ġwith Ċ Ġ* Ġthis Ġwork Ġfor Ġadditional Ġinformation Ġregarding Ġcopyright Ġownership . Ċ Ġ* ĠThe ĠASF Ġlicenses Ġthis Ġfile Ġto ĠYou Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttps :// 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 Ġjet brains . datal ore . plot . base . stat . math 3 Ċ Ċ import Ġkotlin . jvm . Jvm Over loads ĊĊ Ċ /** Ċ Ġ* ĠProvide Ġa Ġdefault Ġimplementation Ġfor Ġseveral Ġfunctions Ġuseful Ġto Ġgeneric Ċ Ġ* Ġsol vers . Ċ Ġ* Ċ Ġ* Ġ@ param Ġ< FUNC > ĠType Ġof Ġfunction Ġto Ġsolve . Ċ Ġ* Ċ Ġ* Ġ@ version Ġ$ Id $ Ċ Ġ* Ġ@ since Ġ 2 . 0 Ċ </ FUNC > Ġ*/ Ċ abstract Ġclass ĠBase Abstract Un ivariate Solver < FUNC Ġ: ĠUn ivariate Function > Ċ /** Ċ Ġ* ĠConstruct Ġa Ġsolver Ġwith Ġgiven Ġaccur ac ies . Ċ Ġ* Ċ Ġ* Ġ@ param Ġrelative Accuracy ĠMaximum Ġrelative Ġerror . Ċ Ġ* Ġ@ param Ġabsolute Accuracy ĠMaximum Ġabsolute Ġerror . Ċ Ġ* Ġ@ param Ġfunction Value Accuracy ĠMaximum Ġfunction Ġvalue Ġerror . Ċ Ġ*/ Ċ @ Jvm Over loads Ġprotected Ġconstructor ( ĊĠĠĠ Ġ/** ĠRelative Ġaccuracy . Ġ Ġ*/ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ{@ inheritDoc } ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġval Ġrelative Accuracy : ĠDouble , ĊĠĠĠ Ġ/** ĠAbsolute Ġaccuracy . Ġ Ġ*/ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ{@ inheritDoc } ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġval Ġabsolute Accuracy : ĠDouble , ĊĠĠĠ Ġ/** ĠFunction Ġvalue Ġaccuracy . Ġ Ġ*/ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ{@ inheritDoc } ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġval Ġfunction Value Accuracy : ĠDouble Ġ= ĠDEFAULT _ FUNCTION _ VALUE _ AC CUR ACY Ċ ) Ġ: ĠBase Un ivariate Solver < FUNC > Ġ{ ĊĠĠĠ Ġ/** ĠEvalu ations Ġcounter . Ġ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġmy Evalu ations Ġ= ĠIncrement or () ĊĠĠĠ Ġ/** ĠLower Ġend Ġof Ġsearch Ġinterval . Ġ Ġ*/ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġlower Ġend Ġof Ġthe Ġsearch Ġinterval . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġmin : ĠDouble Ġ= Ġ 0 . toDouble () ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġ/** ĠHigh er Ġend Ġof Ġsearch Ġinterval . Ġ Ġ*/ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġhigher Ġend Ġof Ġthe Ġsearch Ġinterval . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġmax : ĠDouble Ġ= Ġ 0 . toDouble () ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġ/** ĠInitial Ġguess . Ġ Ġ*/ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġinitial Ġguess . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġstart Value : ĠDouble Ġ= Ġ 0 . toDouble () ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġ/** ĠFunction Ġto Ġsolve . Ġ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġfunction : ĠFUNC ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** Ġ{@ inheritDoc } Ġ Ġ*/ ĊĠĠĠ Ġoverride Ġval Ġmax Evalu ations : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmy Evalu ations . max imal Count ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstruct Ġa Ġsolver Ġwith Ġgiven Ġabsolute Ġaccuracy . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġabsolute Accuracy ĠMaximum Ġabsolute Ġerror . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġconstructor ( absolute Accuracy : ĠDouble ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ ĠDEFAULT _ REL ATIVE _ AC CUR ACY , ĊĠĠĠĠĠĠĠ Ġabsolute Accuracy , ĊĠĠĠĠĠĠĠ ĠDEFAULT _ FUNCTION _ VALUE _ AC CUR ACY ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġevalu ations Ġ= Ġmy Evalu ations . count ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCompute Ġthe Ġobjective Ġfunction Ġvalue . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġpoint ĠPoint Ġat Ġwhich Ġthe Ġobjective Ġfunction Ġmust Ġbe Ġevaluated . ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġobjective Ġfunction Ġvalue Ġat Ġspecified Ġpoint . ĊĠĠĠĠ Ġ* Ġ@ throws ĠToo Many Evalu ations Exception Ġif Ġthe Ġmax imal Ġnumber Ġof Ġevalu ations ĊĠĠĠĠ Ġ* Ġis Ġexceeded . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġcompute Objective Value ( point : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġincrement Evaluation Count () ĊĠĠĠĠĠĠĠ Ġreturn Ġfunction !!. value ( point ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPrepare Ġfor Ġcomputation . ĊĠĠĠĠ Ġ* ĠSub classes Ġmust Ġcall Ġthis Ġmethod Ġif Ġthey Ġoverride Ġany Ġof Ġthe ĊĠĠĠĠ Ġ* Ġ` solve ` Ġmethods . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġf ĠFunction Ġto Ġsolve . ĊĠĠĠĠ Ġ* Ġ@ param Ġmin ĠLower Ġbound Ġfor Ġthe Ġinterval . ĊĠĠĠĠ Ġ* Ġ@ param Ġmax ĠUpper Ġbound Ġfor Ġthe Ġinterval . ĊĠĠĠĠ Ġ* Ġ@ param Ġstart Value ĠStart Ġvalue Ġto Ġuse . ĊĠĠĠĠ Ġ* Ġ@ param Ġmax Eval ĠMaximum Ġnumber Ġof Ġevalu ations . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġsetup ( ĊĠĠĠĠĠĠĠ Ġmax Eval : ĠInt , ĊĠĠĠĠĠĠĠ Ġf : ĠFUNC , ĊĠĠĠĠĠĠĠ Ġmin : ĠDouble , Ġmax : ĠDouble , ĊĠĠĠĠĠĠĠ Ġstart Value : ĠDouble ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠReset . ĊĠĠĠĠĠĠĠ Ġthis . min Ġ= Ġmin ĊĠĠĠĠĠĠĠ Ġthis . max Ġ= Ġmax ĊĠĠĠĠĠĠĠ Ġthis . start Value Ġ= Ġstart Value ĊĠĠĠĠĠĠĠ Ġfunction Ġ= Ġf ĊĠĠĠĠĠĠĠ Ġmy Evalu ations . max imal Count Ġ= Ġmax Eval ĊĠĠĠĠĠĠĠ Ġmy Evalu ations . reset Count () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ{@ inheritDoc } Ġ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġsolve ( max Eval : ĠInt , Ġf : ĠFUNC , Ġmin : ĠDouble , Ġmax : ĠDouble , Ġstart Value : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInitialization . ĊĠĠĠĠĠĠĠ Ġsetup ( max Eval , Ġf , Ġmin , Ġmax , Ġstart Value ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠPerform Ġcomputation . ĊĠĠĠĠĠĠĠ Ġreturn Ġdo Solve () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ{@ inheritDoc } Ġ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġsolve ( max Eval : ĠInt , Ġf : ĠFUNC , Ġmin : ĠDouble , Ġmax : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsolve ( max Eval , Ġf , Ġmin , Ġmax , Ġmin Ġ+ Ġ 0 . 5 Ġ* Ġ( max Ġ- Ġmin )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ{@ inheritDoc } Ġ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġsolve ( max Eval : ĠInt , Ġf : ĠFUNC , Ġstart Value : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsolve ( max Eval , Ġf , ĠDouble . NaN , ĠDouble . NaN , Ġstart Value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod Ġfor Ġimplementing Ġactual Ġoptimization Ġalgorithms Ġin Ġderived ĊĠĠĠĠ Ġ* Ġclasses . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġroot . ĊĠĠĠĠ Ġ* Ġ@ throws ĠToo Many Evalu ations Exception Ġif Ġthe Ġmax imal Ġnumber Ġof Ġevalu ations ĊĠĠĠĠ Ġ* Ġis Ġexceeded . ĊĠĠĠĠ Ġ* Ġ@ throws ĠNo Bracket ing Exception Ġif Ġthe Ġinitial Ġsearch Ġinterval Ġdoes Ġnot Ġbracket ĊĠĠĠĠ Ġ* Ġa Ġroot Ġand Ġthe Ġsolver Ġrequires Ġit . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġdo Solve (): ĠDouble ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCheck Ġwhether Ġthe Ġfunction Ġtakes Ġopposite Ġsigns Ġat Ġthe Ġendpoints . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġlower ĠLower Ġendpoint . ĊĠĠĠĠ Ġ* Ġ@ param Ġupper ĠUpper Ġendpoint . ĊĠĠĠĠ Ġ* Ġ@ return Ġ` true ` Ġif Ġthe Ġfunction Ġvalues Ġhave Ġopposite Ġsigns Ġat Ġthe ĊĠĠĠĠ Ġ* Ġgiven Ġpoints . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġis Bracket ing ( ĊĠĠĠĠĠĠĠ Ġlower : ĠDouble , ĊĠĠĠĠĠĠĠ Ġupper : ĠDouble ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠUn ivariate Solver Utils . is Bracket ing ( function !! , Ġlower , Ġupper ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCheck Ġwhether Ġthe Ġarguments Ġform Ġa Ġ( strict ly ) Ġincreasing Ġsequence . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġstart ĠFirst Ġnumber . ĊĠĠĠĠ Ġ* Ġ@ param Ġmid ĠSecond Ġnumber . ĊĠĠĠĠ Ġ* Ġ@ param Ġend ĠThird Ġnumber . ĊĠĠĠĠ Ġ* Ġ@ return Ġ` true ` Ġif Ġthe Ġarguments Ġform Ġan Ġincreasing Ġsequence . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġis Sequence ( ĊĠĠĠĠĠĠĠ Ġstart : ĠDouble , ĊĠĠĠĠĠĠĠ Ġmid : ĠDouble , ĊĠĠĠĠĠĠĠ Ġend : ĠDouble ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠUn ivariate Solver Utils . is Sequence ( start , Ġmid , Ġend ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCheck Ġthat Ġthe Ġendpoints Ġspecify Ġan Ġinterval . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġlower ĠLower Ġendpoint . ĊĠĠĠĠ Ġ* Ġ@ param Ġupper ĠUpper Ġendpoint . ĊĠĠĠĠ Ġ* Ġ@ throws Ġorg . apache . commons . math 3 . exception . Number Is Too Large Exception ĊĠĠĠĠ Ġ* Ġif Ġ` lower Ġ>= Ġupper `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġverify Interval ( ĊĠĠĠĠĠĠĠ Ġlower : ĠDouble , ĊĠĠĠĠĠĠĠ Ġupper : ĠDouble ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠUn ivariate Solver Utils . verify Interval ( lower , Ġupper ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCheck Ġthat Ġ` lower Ġ< Ġinitial Ġ< Ġupper `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġlower ĠLower Ġendpoint . ĊĠĠĠĠ Ġ* Ġ@ param Ġinitial ĠInitial Ġvalue . ĊĠĠĠĠ Ġ* Ġ@ param Ġupper ĠUpper Ġendpoint . ĊĠĠĠĠ Ġ* Ġ@ throws Ġorg . apache . commons . math 3 . exception . Number Is Too Large Exception ĊĠĠĠĠ Ġ* Ġif Ġ` lower Ġ>= Ġinitial ` Ġor Ġ` initial Ġ>= Ġupper `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġverify Sequence ( ĊĠĠĠĠĠĠĠ Ġlower : ĠDouble , ĊĠĠĠĠĠĠĠ Ġinitial : ĠDouble , ĊĠĠĠĠĠĠĠ Ġupper : ĠDouble ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠUn ivariate Solver Utils . verify Sequence ( lower , Ġinitial , Ġupper ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCheck Ġthat Ġthe Ġendpoints Ġspecify Ġan Ġinterval Ġand Ġthe Ġfunction Ġtakes ĊĠĠĠĠ Ġ* Ġopposite Ġsigns Ġat Ġthe Ġendpoints . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġlower ĠLower Ġendpoint . ĊĠĠĠĠ Ġ* Ġ@ param Ġupper ĠUpper Ġendpoint . ĊĠĠĠĠ Ġ* Ġ@ throws ĠNo Bracket ing Exception Ġif ĊĠĠĠĠ Ġ* Ġthe Ġfunction Ġhas Ġthe Ġsame Ġsign Ġat Ġthe Ġendpoints . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġverify Bracket ing ( ĊĠĠĠĠĠĠĠ Ġlower : ĠDouble , ĊĠĠĠĠĠĠĠ Ġupper : ĠDouble ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠUn ivariate Solver Utils . verify Bracket ing ( function !! , Ġlower , Ġupper ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIncrement Ġthe Ġevaluation Ġcount Ġby Ġone . ĊĠĠĠĠ Ġ* ĠMethod Ġ[. compute Objective Value ] Ġcalls Ġthis Ġmethod Ġinternally . ĊĠĠĠĠ Ġ* ĠIt Ġis Ġprovided Ġfor Ġsubclasses Ġthat Ġdo Ġnot Ġexclus ively Ġuse ĊĠĠĠĠ Ġ* Ġ` compute Objective Value ` Ġto Ġsolve Ġthe Ġfunction . ĊĠĠĠĠ Ġ* ĠSee Ġe . g . Ġ[ Abstract Different iable Un ivariate Solver ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġincrement Evaluation Count () Ġ{ ĊĠĠĠĠĠĠĠ Ġmy Evalu ations . increment Count () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĠDefault Ġrelative Ġaccuracy . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDEFAULT _ REL ATIVE _ AC CUR ACY Ġ= Ġ 1 e - 1 4 ĊĠĠĠĠĠĠĠ Ġ/** ĠDefault Ġfunction Ġvalue Ġaccuracy . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDEFAULT _ FUNCTION _ VALUE _ AC CUR ACY Ġ= Ġ 1 e - 1 5 ĊĠĠĠ Ġ} Ċ } Ċ /** Ċ Ġ* ĠConstruct Ġa Ġsolver Ġwith Ġgiven Ġaccur ac ies . Ċ Ġ* Ċ Ġ* Ġ@ param Ġrelative Accuracy ĠMaximum Ġrelative Ġerror . Ċ Ġ* Ġ@ param Ġabsolute Accuracy ĠMaximum Ġabsolute Ġerror . Ċ Ġ*/ Ċ