| | """Request schemas for the API.""" |
| |
|
| | from typing import List, Dict, Any, Optional |
| | from pydantic import BaseModel, Field |
| |
|
| |
|
| | class AlgorithmConfig(BaseModel): |
| | """Configuration parameters for the land redistribution algorithm.""" |
| | |
| | |
| | spacing_min: float = Field(default=20.0, ge=10.0, le=200.0, description="Minimum grid spacing in meters") |
| | spacing_max: float = Field(default=30.0, ge=10.0, le=200.0, description="Maximum grid spacing in meters") |
| | angle_min: float = Field(default=0.0, ge=0.0, le=90.0, description="Minimum grid angle in degrees") |
| | angle_max: float = Field(default=90.0, ge=0.0, le=90.0, description="Maximum grid angle in degrees") |
| | |
| | |
| | min_lot_width: float = Field(default=20.0, ge=10.0, le=100.0, description="Minimum lot width in meters") |
| | max_lot_width: float = Field(default=80.0, ge=40.0, le=200.0, description="Maximum lot width in meters") |
| | target_lot_width: float = Field(default=40.0, ge=20.0, le=100.0, description="Target lot width in meters") |
| | |
| | |
| | road_width: float = Field(default=6.0, ge=3.0, le=30.0, description="Road width in meters") |
| | block_depth: float = Field(default=50.0, ge=30.0, le=200.0, description="Block depth in meters") |
| | |
| | |
| | population_size: int = Field(default=50, ge=20, le=200, description="NSGA-II population size") |
| | generations: int = Field(default=100, ge=50, le=500, description="Number of generations") |
| | ortools_time_limit: float = Field(default=5.0, ge=0.1, le=60.0, description="OR-Tools solver time limit per block (seconds)") |
| |
|
| |
|
| | class LandPlot(BaseModel): |
| | """A land plot represented as a GeoJSON polygon.""" |
| | |
| | type: str = Field(default="Polygon", description="Geometry type") |
| | coordinates: List[List[List[float]]] = Field(..., description="Polygon coordinates [[x, y], ...]") |
| | properties: Optional[Dict[str, Any]] = Field(default={}, description="Additional properties") |
| |
|
| |
|
| | class OptimizationRequest(BaseModel): |
| | """Request model for running the optimization algorithm.""" |
| | |
| | config: AlgorithmConfig = Field(..., description="Algorithm configuration") |
| | land_plots: List[LandPlot] = Field(..., description="Initial land plots to subdivide") |
| |
|