fix: forest_pct — доля 0..1 вместо процентов (вес леса падает со 100×)
Закономерность «приоритетная зона вверх-вправо»: score_zone умножает weight × forest_pct, ожидая ДОЛЮ (тесты скоринга 0.3–0.8), а гео-сервисы (osm_local и legacy Overpass calculate_forest_coverage) отдавали ПРОЦЕНТЫ 0..100. Лес получил фактический вес в 100 раз больше задумки — топ зон систематически занимали чуть более зелёные сектора. Фикс: osm_local.calculate_forest_coverage возвращают долю 0..1. Разброс скорингов по Минску: 1.244 → 0.032 (честно однородный город). Остаточные различия — вода/дороги; дифференциация плотностей город/село — ревью скоринга (B1), коэффициенты не тронуты. +регресс-тест 0<=forest_pct<=1. 197 passed.
This commit is contained in:
@@ -45,7 +45,9 @@ class TestOsmLocal:
|
||||
assert set(f) == {'roads_km', 'road_density', 'water_distance_km',
|
||||
'settlement_distance_km', 'forest_pct'}
|
||||
assert f['roads_km'] >= 0
|
||||
assert 0 <= f['forest_pct'] <= 100
|
||||
# Контракт: лес — ДОЛЯ 0..1 (scoring_service умножает weight × forest_pct).
|
||||
# Регресс: раньше отдавались проценты 0..100 — лес доминировал со 100× весом.
|
||||
assert 0 <= f['forest_pct'] <= 1
|
||||
assert f['water_distance_km'] is None or f['water_distance_km'] > 0
|
||||
|
||||
def test_zones_differ_between_directions(self):
|
||||
|
||||
Reference in New Issue
Block a user