- Change normalization from sum to max: visit_count / max^2 - This gives stronger discrimination toward unvisited nodes - Weight 1 now gives 66.2% coverage (vs 63.6% baseline) - Rename CLI: --weight-dca -> --weight-dca-voice-movement - Rename CLI: --weight-hamiltonian -> --weight-dca-hamiltonian - Restore DCA Hamiltonian display in analysis output - Update README with new CLI names and factor descriptions
- Implement DCA (Dissonant Counterpoint Algorithm) to favor voice changes - Track actual pitch changes in voice_stay_count (not graph indices) - Add CLI weight arguments: --weight-melodic, --weight-contrary-motion, --weight-hamiltonian, --weight-dca, --weight-target-range - DCA probability = (sum of stay_counts for changing voices) / (sum of all) - Test with --weight-dca 100 shows frequent voice changes
- Add --target-range CLI option (in octaves) - Implement target_range weight in PathFinder - Add test for target range weight - Add --max-path to README