ropensci / nlrx

nlrx NetLogo R
https://docs.ropensci.org/nlrx
GNU General Public License v3.0
77 stars 12 forks source link

Java exception error when running run_nl_all(nl) in nlrx using Sobol method #74

Closed kmbarn4 closed 1 year ago

kmbarn4 commented 1 year ago

Hi! I am getting a similar "exception" message to issue #27 and issue #22 . Below is the exception message I get when I run the line: "results <- run_nl_all(nl)". I stopped running it midway because the exception message just kept getting longer and longer. I'd really appreciate the help!! Thank you.

Run #1, JAVA EXCEPTION: Expected reporter. Expected reporter. at position 49 in at org.nlogo.core.Fail$.exception(Fail.scala:27) at org.nlogo.core.Fail$.exception(Fail.scala:25) at org.nlogo.core.Fail$.exception(Fail.scala:23) at org.nlogo.parse.ExpressionParser$.parseExpression(ExpressionParser.scala:305) at org.nlogo.parse.ExpressionParser$.$anonfun$parseExpressionInternal$1(ExpressionParser.scala:358) at org.nlogo.parse.ExpressionParser$.parseParenthesized(ExpressionParser.scala:317) at org.nlogo.parse.ExpressionParser$.parseExpressionInternal(ExpressionParser.scala:363) at org.nlogo.parse.ExpressionParser$.parseArgExpression(ExpressionParser.scala:230) at org.nlogo.parse.ExpressionParser$.$anonfun$parseArguments$1(ExpressionParser.scala:166) at org.nlogo.parse.ExpressionParser$.$anonfun$parseArguments$1$adapted(ExpressionParser.scala:165) at scala.collection.immutable.Range.foreach(Range.scala:158) at org.nlogo.parse.ExpressionParser$.parseArguments(ExpressionParser.scala:165) at org.nlogo.parse.ExpressionParser$.parsePotentiallyVariadicArgumentList(ExpressionParser.scala:88) at org.nlogo.parse.ExpressionParser$.parseStatement(ExpressionParser.scala:69) at org.nlogo.parse.ExpressionParser$.$anonfun$apply$1(ExpressionParser.scala:30) at org.nlogo.parse.ExpressionParser$.parseStatements(ExpressionParser.scala:42) at org.nlogo.parse.ExpressionParser$.apply(ExpressionParser.scala:30) at org.nlogo.parse.NetLogoParser.parseProcedure(NetLogoParser.scala:45) at org.nlogo.parse.NetLogoParser.parseProcedure$(NetLogoParser.scala:29) at org.nlogo.parse.FrontEnd$.parseProcedure(FrontEnd.scala:10) at org.nlogo.parse.NetLogoParser.$anonfun$basicParse$1(NetLogoParser.scala:25) at scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:285) at scala.collection.Iterator.foreach(Iterator.scala:943) at scala.collection.Iterator.foreach$(Iterator.scala:943) at scala.collection.AbstractIterator.foreach(Iterator.scala:1431) at scala.collection.MapLike$DefaultValuesIterable.foreach(MapLike.scala:213) at scala.collection.TraversableLike.map(TraversableLike.scala:285) at scala.collection.TraversableLike.map$(TraversableLike.scala:278) at scala.collection.AbstractTraversable.map(Traversable.scala:108) at org.nlogo.parse.NetLogoParser.basicParse(NetLogoParser.scala:25) at org.nlogo.parse.NetLogoParser.basicParse$(NetLogoParser.scala:15) at org.nlogo.parse.FrontEnd$.basicParse(FrontEnd.scala:10) at org.nlogo.parse.FrontEndMain.frontEnd(FrontEnd.scala:26) at org.nlogo.parse.FrontEndMain.frontEnd$(FrontEnd.scala:25) at org.nlogo.parse.FrontEnd$.frontEnd(FrontEnd.scala:10) at org.nlogo.compile.CompilerMain$.compile(CompilerMain.scala:47) at org.nlogo.compile.Compiler.compileMoreCode(Compiler.scala:85) at org.nlogo.compile.Compiler.compileMoreCode(Compiler.scala:100) at org.nlogo.workspace.Evaluator.invokeCompiler(Evaluator.scala:159) at org.nlogo.workspace.Evaluator.compileReporter(Evaluator.scala:38) at org.nlogo.workspace.Evaluating.compileReporter(Evaluating.scala:57) at org.nlogo.workspace.Evaluating.compileReporter$(Evaluating.scala:56) at org.nlogo.workspace.AbstractWorkspaceScala.compileReporter(AbstractWorkspaceScala.scala:26) at org.nlogo.lab.Worker$Procedures.<init>(Worker.scala:71) at org.nlogo.lab.Worker$Runner.callHelper(Worker.scala:101) at org.nlogo.lab.Worker$Runner.call(Worker.scala:91) at org.nlogo.lab.Worker$Runner.call(Worker.scala:74) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Run #1, JAVA EXCEPTION: Expected reporter. Expected reporter. at position 49 in at org.nlogo.core.Fail$.exception(Fail.scala:27) at org.nlogo.core.Fail$.exception(Fail.scala:25) at org.nlogo.core.Fail$.exception(Fail.scala:23) at org.nlogo.parse.ExpressionParser$.parseExpression(ExpressionParser.scala:305) at org.nlogo.parse.ExpressionParser$.$anonfun$parseExpressionInternal$1(ExpressionParser.scala:358) at org.nlogo.parse.ExpressionParser$.parseParenthesized(ExpressionParser.scala:317) at org.nlogo.parse.ExpressionParser$.parseExpressionInternal(ExpressionParser.scala:363) at org.nlogo.parse.ExpressionParser$.parseArgExpression(ExpressionParser.scala:230) at org.nlogo.parse.ExpressionParser$.$anonfun$parseArguments$1(ExpressionParser.scala:166) at org.nlogo.parse.ExpressionParser$.$anonfun$parseArguments$1$adapted(ExpressionParser.scala:165) at scala.collection.immutable.Range.foreach(Range.scala:158) at org.nlogo.parse.ExpressionParser$.parseArguments(ExpressionParser.scala:165) at org.nlogo.parse.ExpressionParser$.parsePotentiallyVariadicArgumentList(ExpressionParser.scala:88) at org.nlogo.parse.ExpressionParser$.parseStatement(ExpressionParser.scala:69) at org.nlogo.parse.ExpressionParser$.$anonfun$apply$1(ExpressionParser.scala:30) at org.nlogo.parse.ExpressionParser$.parseStatements(ExpressionParser.scala:42) at org.nlogo.parse.ExpressionParser$.apply(ExpressionParser.scala:30) at org.nlogo.parse.NetLogoParser.parseProcedure(NetLogoParser.scala:45) at org.nlogo.parse.NetLogoParser.parseProcedure$(NetLogoParser.scala:29) at org.nlogo.parse.FrontEnd$.parseProcedure(FrontEnd.scala:10) at org.nlogo.parse.NetLogoParser.$anonfun$basicParse$1(NetLogoParser.scala:25) at scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:285) at scala.collection.Iterator.foreach(Iterator.scala:943) at scala.collection.Iterator.foreach$(Iterator.scala:943) at scala.collection.AbstractIterator.foreach(Iterator.scala:1431) at scala.collection.MapLike$DefaultValuesIterable.foreach(MapLike.scala:213) at scala.collection.TraversableLike.map(TraversableLike.scala:285) at scala.collection.TraversableLike.map$(TraversableLike.scala:278) at scala.collection.AbstractTraversable.map(Traversable.scala:108) at org.nlogo.parse.NetLogoParser.basicParse(NetLogoParser.scala:25) at org.nlogo.parse.NetLogoParser.basicParse$(NetLogoParser.scala:15) at org.nlogo.parse.FrontEnd$.basicParse(FrontEnd.scala:10) at org.nlogo.parse.FrontEndMain.frontEnd(FrontEnd.scala:26) at org.nlogo.parse.FrontEndMain.frontEnd$(FrontEnd.scala:25) at org.nlogo.parse.FrontEnd$.frontEnd(FrontEnd.scala:10) at org.nlogo.compile.CompilerMain$.compile(CompilerMain.scala:47) at org.nlogo.compile.Compiler.compileMoreCode(Compiler.scala:85) at org.nlogo.compile.Compiler.compileMoreCode(Compiler.scala:100) at org.nlogo.workspace.Evaluator.invokeCompiler(Evaluator.scala:159) at org.nlogo.workspace.Evaluator.compileReporter(Evaluator.scala:38) at org.nlogo.workspace.Evaluating.compileReporter(Evaluating.scala:57) at org.nlogo.workspace.Evaluating.compileReporter$(Evaluating.scala:56) at org.nlogo.workspace.AbstractWorkspaceScala.compileReporter(AbstractWorkspaceScala.scala:26) at org.nlogo.lab.Worker$Procedures.<init>(Worker.scala:71) at org.nlogo.lab.Worker$Runner.callHelper(Worker.scala:101) at org.nlogo.lab.Worker$Runner.call(Worker.scala:91) at org.nlogo.lab.Worker$Runner.call(Worker.scala:74) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)

Below is my code for the analysis.

`library(Rcpp) library(nlrx)

nl <- nl(nlversion = "6.2.0", nlpath = file.path("C:/Program Files/NetLogo 6.2.0/") , modelpath = file.path("C:/Program Files/NetLogo 6.2.0/model/model2.nlogo") , jvmmem = 1024)

nl@experiment <- experiment(expname = "multiple_modes_sobel", outpath = file.path("C:/Users/civitellolabuser/Desktop/KM/output"), repetition = 1, tickmetrics = "false", idsetup = "setup", idgo = "go", runtime = 90, stopcond = "if ticks = 90", metrics = c("count metamorphs", "prop_deaths_due_to_bd", "avg_spn_inten_metas", "median_spn_inten_metas", "metas_prev", "aggregation_inten_metas", "realized-coverage", "total-zsp-density"), variables = list( "c_smax" = list(min = 0, max = 0.688, qfun= "qunif"), "c_clear" = list(min = 0, max = 0.688, qfun= "qunif"), "c_est" = list(min = -4.605, max = 0, qfun= "qunif"), "c_shedding" = list(min = -4.605, max = 0, qfun = "qunif") ), constants = list( "SimplePond" = "false", "last-day" = 90, "birth_pulses" = 1, "ini-tadpoles-per-pondpatch" = 500, "Bd-inf-tadpoles-per-infpondpatch" = 1, "inf-ponds" = 1, "tad-mort" = 0.06, "meta-mort"= 0.02, "t-movement" = 0.25, "m-land" = 0.1, "baseline_smax" = 562, "baseline_spn_clearance" = 0.09, "baseline_est" = 0.25, "baseline_shedding" = 17.8, "v-efficacy" = 1, "v-coverage" = 0.5, "vaccination-day" = 0, "relative_variation" = 0, "natural_imm_efficacy" = 0) )

nl@simdesign <- simdesign_sobol(nl = nl, samples = 100, sobolorder = 2, sobolnboot = 100, sobolconf = 0.95, nseeds = 5, precision = 3) library(sensitivity) library(numbers)

Sys.setenv(JAVA_HOME = file.path("C:/Program Files (x86)/Java/jre1.8.0_291"))

results <- run_nl_all(nl)`

Lastly, everything has a green check when I print(nl) except supported nlversion, simoutput attached and number of runs calculated. However, based on what I've read, nlrx should be compatible with netlogo 6.2.0.

The package is really cool and I'm really excited about implementing the Sobol analysis so I hope I can get it to work! Thanks so much!!

nldoc commented 1 year ago

Thank you for your bug report. The following line from your error message indicates a runtime error in your NetLogo model. Run #1, JAVA EXCEPTION: Expected reporter. Expected reporter. at position 49 in at

It looks like the error is not caused by nlrx, but by the model code itself. My advise would be to check the exact parameterisation of the run that failed (which siminputrow of the nl@simdesign@siminput parameter matrix caused the error). Then open your model in NetLogo and see if you can reproduce that error by setting the exact same parameterisation that was causing the runtime error. If you can reproduce the error in NetLogo, you clearly need to debug the model first.

Often, when parameters are varied over large parameter spaces (as typically done in Sensitivity Analyses) such edge case runtime errors come up that were not discovered before.

If you are not able to reproduce the error in NetLogo directly (without using nlrx), feel free to re-open the issue.