opt4j icon indicating copy to clipboard operation
opt4j copied to clipboard

Implement an optimization logger

Open FedorSmirnov89 opened this issue 7 years ago • 4 comments

I am putting this into the Opt4J thread as Opt is the base for all our projects, yet this issue is equally relevant for both OpenDSE and JReliability.

At the moment, we have a mixed approach of providing information throughout the exploration. On the one hand, we provide a primitive logger for the exploration. On the other hand, we also output information through the sysout. Take the openDSE output as an example: There, we have the number of constraints, variables and units before and after the constraint preprocessing.

On the one hand, this information is much too detailed for the average user. Someone who is not familiar with SAT Decoding (probably the case for most users) can and should not have to understand the meaning of these numbers. On the other hand, this information is very useful (for example for me in order to compare two different encodings). So to sum it up: the information should be gathered yet not displayed by default.

My proposal is to create a Logger interface inside the Opt project that can be equipped with listeners to gather information throughout the exploration. This information should then be written in a file which is put into a predefined folder.

As I think that in a lot of cases, we will want to process this file automatically, I would propose a machine-readable format, preferably JSON. So the open questions in this issue are:

  • Do you agree on the general need for a logger?
  • Which format do we want (JSON, XML, Tsv)
  • Which information should we put into this file?
  • Where should we store the file?

In case that we agree on the general need for such a logger class, I will create a section in our Wiki. We can then take the discussion about the class structure, the format and the needed information directly to the Wiki.

FedorSmirnov89 avatar Apr 16 '18 07:04 FedorSmirnov89

Agree to the logger feature. Disagree to any manual implementation. Remove all sys.outs and replace with log4j. This is the default solution for logging in Java.

felixreimann avatar Apr 16 '18 17:04 felixreimann

Then, additionally, create a nice Module to configure log4j.

felixreimann avatar Apr 16 '18 17:04 felixreimann

Okay, I will have a look at log4j and make a prototype implementation that we can then discuss.

FedorSmirnov89 avatar Apr 17 '18 13:04 FedorSmirnov89

Suggestion: The new logger should also record the time required for the encoding (generating constraints, preprocessing, etc), since the contribution of this setup time to the total DSE time is quite significant for larger many-core examples (e.g. ≈20 minutes for E3S application automotive on a 24x24 NoC). As far as I have seen, this has not been considered yet and is also not yet included in the analysis of DSE run times. If you agree and there already is a prototype for the new logger, I could try to integrate this. Otherwise I will have a look at log4j and implementing a logger specifically for the setup time as well.

vrichthammer avatar Jun 08 '18 08:06 vrichthammer