I am posting to indicate that I have not abandoned the simulation project; I am gradually trying to progress it. I don't expect a response unless you think I have left something important out or am painting myself into a corner with the design choices I am laying out.
I asked myself: What are we going to read from the file directories and how will what we read figure in during prompting and execution?
At the indicative level, a voting system declares what form of ballot it requires.
Tactics, at the indicative level, will be able to answer given a ballot form, are they capable of generating ballots conforming thereto.
So, when the user selects a voting system, the app will offer the tactics that can produce ballots for that system.
Since tactics will have an indicative level and an executive level, they must comprise at least two files, so it makes sense to use a directory for each tactic.
So there will be one directory containing the subdirectories for the voting systems and one directory containing the subdirectories for the tactics. There is no need for the hierarchy of directories to reflect any kind of categorization of either. So, for example, there will not be a directory of ranking voting systems nor a directory of rating voting systems nor a directory of Condorcet-compliant voting systems, etc.
Example declarations of ballot types:
{ [0]: 'rating', finite: false, /* Continuous -- allows floating-point ratings. */ min: 0, max: 1, } { [0]: 'rating', finite: true, range: [0, 1, 2, 3, 4, 5], /* like STAR */ } { [0]: 'ranking', equal_ranking_allowed: true, }Here's Approval:
{ [0]: 'rating', finite: true, range: [0, 1], /* Approval */ }