{"name": "PlanX", "package_name": "planx", "version": "2.8.0", "experimental": false, "qgis_min": "3.22.0", "qgis_max": "4.99.0", "downloads": 30, "uploaded_by": "geo140195philo", "upload_datetime": "2026-06-29T11:58:00.967547", "changelog": "## [2.8.0] - 2026-06-29\r\n\r\nMulti-objective land-use allocation: compactness & adjacency.\r\n\r\n### Added\r\n- The **Land-Use Allocation Optimizer is now multi-objective** \u2014 beyond\r\n  per-parcel suitability it can shape the *spatial pattern* of the plan,\r\n  maximizing `w_suit \u00b7 \u03a3(area \u00b7 suitability) + \u03a3_adjacent L \u00b7 C[use, use]`\r\n  over the parcel adjacency graph (`L` = shared boundary length):\r\n  - **Compactness weight**: rewards same-use parcels that share a\r\n    boundary, so each land use forms compact contiguous zones instead of\r\n    scattering (reward per map unit of shared boundary; `0` = off).\r\n  - **Adjacency rules**: free text `residential|industry=-2,\r\n    residential|green=1` rewards (+) or penalises (-) specific use pairs\r\n    being neighbours, per unit of shared boundary \u2014 keep incompatible uses\r\n    apart and compatible ones together.\r\n  - **Suitability weight** (advanced) balances suitability against the\r\n    spatial terms.\r\n  Parcel adjacency and shared-boundary lengths are computed with a spatial\r\n  index; the run reports the spatial score and the share of shared\r\n  boundary that is between same-use parcels (a compactness indicator).\r\n  With compactness `0` and no rules the result is **identical** to the\r\n  pure-suitability allocation of 2.7.0.\r\n- `engine/allocate.allocate_multi` and a shared `_allocate_core`: the\r\n  spatial term is a symmetric use-compatibility matrix over the adjacency\r\n  graph; greedy construction + reassignment + capacity-respecting pairwise\r\n  swaps now optimise the full objective (pure NumPy, unit-tested).\r\n\r\n### Tests\r\n- Engine suite 168 \u2192 175 checks (compactness clustering and an adjacency\r\n  penalty that relocates a repelled use, with hand-computed objectives);\r\n  e2e harness 137 \u2192 141 assertions (a 2\u00d72 checkerboard that stays\r\n  fragmented without compactness and forms blocks with it / a repel rule)\r\n  \u2014 verified on QGIS 3.44 LTR and QGIS 4.0.2.", "external_deps": null, "download_url": "https://plugins.qgis.org/plugins/planx/version/2.8.0/download/"}