Great approach and program!
I would like to chip in some ideas concerning tuning algorythm. Cannot implement them myself, at least not in the foreseeable future, as my coding time was more than 15 years ago – an I never programmed C++ or C (only Java). But at least I can estimate the effort my ideas will make. And, at the moment my „hobby“ is tuning (and repairing) my old grand piano. Searching for a program which will allow to store and restore an existing tuning, I found your project.
First idea: It would be very interesting to combine the entropy approach with other ones. It is propable that tunings made with other methods (by ear, for example, by other prorams or future algorythms) will have a „low“ entropy already. So, choosing them as the starting point for the local minimum search could give good chance to approach the „absolute“ minimum.
This would be easy to implement! Just give the user a possibility to „skip“ the second step of your algorythm (the creation of a „initial“ tuning curve). Instead, users can choose existing values (as recorded/stored) or the already calculated values (by another algorythm) as „initial“. In addition, as other users already wrote, it would be good to show and store the „result“ of tuning (entropy degree) as well as the „initial“ value.
Best would be to extend the whole „algorythm“ class so that it has a standard method for using those existing tunings.
Second idea: today your Entrop algorythm calculates a sum over all 88 strings. A human tuner would not do this! Tuning always means compromising, and a human will (in practise) prefer „important“ relations. Which means: special chords in „important“ tonalities. Now imagine an XML file containing a hierachical „tree“, with categories, sub-categories, sub-sub-categories maybe. The „leafs“ oft he tree would be groups of strings the unser can define. For example, one category could be „A minor“, and ist subcategories could be Tonic, Dominant-Sept, subdominant, other. The user would give those four a relative weight within the superordinated category. Now, the algorythm would calculate the leafs first, an then the tree „bottom up“.
The result would be some kind of „temperation“. Maybe a classic pianist would prefer other relations and tonalities then, let’s say, a jazz pianist!
Thanks for your interest!