fetrunner – a tool to assist in "debugging" FET files

Started by gradgrind, October 30, 2025, 02:39:32 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

corra

Wonderful! the precompiled binary works like a charme.
I have run fetrunner on my file and I got some results...but I am not sure I understand the outcome.
Is there any reference on this?

[EDIT] After some trials I think I have got how to assess the results. In the JSON file I can find the most difficult constraints (UnfulfilledSoftConstraints and UnfulfilledHardConstraints), identified by an ID which is written as a comment in the *_Result.fet file. There those constraints are disabled, and in fact the fet run is much quicker.
I think this tool is really powerful, it literally saves hours of debug. Thank you!

gradgrind

That is an area of documentation that still needs some work, I guess!

If you open the "xxx_Result.fet" file (produced by fetrunner) in fet, you can see that some of the constraints have been deactivated (e.g. in the "Time" tab select "All"). These are the ones which fetrunner decided were "difficult" or impossible.

At the end of the log file, there should be a summary of the accepted constraints.

The "xxx_Result.json" file may contain some information about why a constraint was rejected, but it is rather intended for reading by other software. Nevertheless, a web browser (e.g. Firefox) can display this file quite neatly.

The fact that fetrunner has deactivated a constraint doesn't mean that the constraint is necessarily impossible, though it may do (in combination with other constraints). Another run, perhaps with a different timeout, might give a different result. The results rather list constraints which are making it difficult for fet to generate the timetable.

Looking at a timetable generated (in fet) from the "xxx_Result.fet" file (which is now known to be possible!) and at the disabled constraints will – I hope – help you to discover how you might need to modify your data (activities and constraints) in order to get an acceptable result.

Actually, there is a generated timetable (from "xxx_Result.fet") in "xxx_Result.json", but I haven't written the software to display this (yet).

In the GUI version you can get a "live" view of the progress of a fetrunner run.

corra

Thank you, as per the previous message edit, this was clear now.
What would be desirable is an explanation of the "Run progress", "Run state" and "Log", which is a bit obscure to me.

As a small feedback, in my opinion "Soft constraints" which are unfulfilled should not necessarily be disabled: they can in any case direct the search without being an obstacle to the timetable creation.

gradgrind

Quote from: corra on January 09, 2026, 09:00:04 AMThank you, as per the previous message edit, this was clear now.
What would be desirable is an explanation of the "Run progress", "Run state" and "Log", which is a bit obscure to me.

As a small feedback, in my opinion "Soft constraints" which are unfulfilled should not necessarily be disabled: they can in any case direct the search without being an obstacle to the timetable creation.

It's not quite true that unfulfilled soft constraints are no obstacle to the timetable creation. They can make it much slower! The new version of fetrunner (0.10.0) even changes the weight of soft constraints to 100% by default, though they are still only introduced after handling the real hard constraints. Those with a greater weight are introduced first. I did this because the idea of soft constraints is rather in conflict with fetrunner, which tries to find unfulfillable constraints. Because of the way FET works, difficult soft constraints can extend the processing time greatly, and one of the aims of fetrunner is to get results in a limited time.

There is, however, still an option to let the soft constraints keep their original weight.

I have reworked the "Run state" page and written some more documentation about using the GUI.