[{"data":1,"prerenderedAt":2942},["ShallowReactive",2],{"navigation":3,"portal-navigation":560,"\u002Fdocs\u002Fgetting-started\u002Ftutorials\u002Fresources":586,"\u002Fdocs\u002Fgetting-started\u002Ftutorials\u002Fresources-surround":2939},[4,73,514],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fdocs\u002Fgetting-started","1.docs\u002F0.getting-started",[10,19,48],{"title":11,"icon":6,"path":12,"stem":13,"children":14,"page":6},"Introduction","\u002Fdocs\u002Fgetting-started\u002Fhome","1.docs\u002F0.getting-started\u002F0.home",[15],{"title":11,"path":16,"stem":17,"icon":18},"\u002Fdocs\u002Fgetting-started\u002Fhome\u002Fintroduction","1.docs\u002F0.getting-started\u002F0.home\u002Fintroduction","i-lucide-home",{"title":20,"icon":6,"path":21,"stem":22,"children":23,"page":6},"Quickstart","\u002Fdocs\u002Fgetting-started\u002Fquickstart","1.docs\u002F0.getting-started\u002F1.quickstart",[24,28,33,38,43],{"title":5,"path":25,"stem":26,"icon":27},"\u002Fdocs\u002Fgetting-started\u002Fquickstart\u002Fgetting_started","1.docs\u002F0.getting-started\u002F1.quickstart\u002F0.getting_started","i-lucide-rocket",{"title":29,"path":30,"stem":31,"icon":32},"Quickstart Sandboxes","\u002Fdocs\u002Fgetting-started\u002Fquickstart\u002Fjopt_sandboxes_quickstart","1.docs\u002F0.getting-started\u002F1.quickstart\u002F1.jopt_sandboxes_quickstart","i-lucide-codesandbox",{"title":34,"path":35,"stem":36,"icon":37},"Angular Demo Client","\u002Fdocs\u002Fgetting-started\u002Fquickstart\u002Fangular_demo_client_short","1.docs\u002F0.getting-started\u002F1.quickstart\u002F2.angular_demo_client_short","i-lucide-monitor",{"title":39,"path":40,"stem":41,"icon":42},"JOpt AI Assistant (GPT)","\u002Fdocs\u002Fgetting-started\u002Fquickstart\u002Fjopt-ai-assistant","1.docs\u002F0.getting-started\u002F1.quickstart\u002F3. jopt-ai-assistant","i-lucide-bot",{"title":44,"path":45,"stem":46,"icon":47},"Frequently Asked Questions (FAQ)","\u002Fdocs\u002Fgetting-started\u002Fquickstart\u002Ffaq","1.docs\u002F0.getting-started\u002F1.quickstart\u002FFAQ","i-lucide-table-of-contents",{"title":49,"icon":6,"path":50,"stem":51,"children":52,"page":6},"Basic Tutorials","\u002Fdocs\u002Fgetting-started\u002Ftutorials","1.docs\u002F0.getting-started\u002F2.tutorials",[53,58,63,68],{"title":54,"path":55,"stem":56,"icon":57},"Basic elements","\u002Fdocs\u002Fgetting-started\u002Ftutorials\u002Fbasic-elements","1.docs\u002F0.getting-started\u002F2.tutorials\u002F0.basic-elements","i-lucide-component",{"title":59,"path":60,"stem":61,"icon":62},"First Optimization","\u002Fdocs\u002Fgetting-started\u002Ftutorials\u002Ffirst-optimization","1.docs\u002F0.getting-started\u002F2.tutorials\u002F1.first-optimization","i-lucide-footprints",{"title":64,"path":65,"stem":66,"icon":67},"Nodes","\u002Fdocs\u002Fgetting-started\u002Ftutorials\u002Fnodes","1.docs\u002F0.getting-started\u002F2.tutorials\u002FNodes","i-lucide-map-pin",{"title":69,"path":70,"stem":71,"icon":72},"Resources","\u002Fdocs\u002Fgetting-started\u002Ftutorials\u002Fresources","1.docs\u002F0.getting-started\u002F2.tutorials\u002FResources","i-lucide-truck",{"title":74,"icon":6,"path":75,"stem":76,"children":77,"page":6},"Learn & Explore","\u002Fdocs\u002Flearn-and-explore","1.docs\u002F1.learn-and-explore",[78,92,215,225,245,291,428,497],{"title":79,"icon":6,"path":80,"stem":81,"children":82,"page":6},"Features Overview","\u002Fdocs\u002Flearn-and-explore\u002Ffeatures","1.docs\u002F1.learn-and-explore\u002F0.features",[83,88],{"title":84,"path":85,"stem":86,"icon":87},"TourOptimizer Feature List (Basic \u002F Advanced \u002F Expert)","\u002Fdocs\u002Flearn-and-explore\u002Ffeatures\u002Ffeaturelist","1.docs\u002F1.learn-and-explore\u002F0.features\u002F0.featureList","i-lucide-earth",{"title":89,"path":90,"stem":91,"icon":87},"TourOptimizer Feature Atlas","\u002Fdocs\u002Flearn-and-explore\u002Ffeatures\u002Ffeatureoverview","1.docs\u002F1.learn-and-explore\u002F0.features\u002FFeatureOverview",{"title":93,"icon":6,"path":94,"stem":95,"children":96},"Feature Guides","\u002Fdocs\u002Flearn-and-explore\u002Ffeature-guides","1.docs\u002F1.learn-and-explore\u002F1.feature-guides\u002Findex",[97,100,105,109,114,119,124,129,134,139,144,148,153,158,163,168,173,177,181,186,191,196,201,206,210],{"title":98,"path":94,"stem":95,"icon":99},"Feature Guides - Overview","i-lucide-clipboard-list",{"title":101,"path":102,"stem":103,"icon":104},"License","\u002Fdocs\u002Flearn-and-explore\u002Ffeature-guides\u002Flicense","1.docs\u002F1.learn-and-explore\u002F1.feature-guides\u002F0.license","i-lucide-key",{"title":106,"path":107,"stem":108,"icon":37},"Simplified Angular Demo Client","\u002Fdocs\u002Flearn-and-explore\u002Ffeature-guides\u002Fangular_demo_client","1.docs\u002F1.learn-and-explore\u002F1.feature-guides\u002Fangular_demo_client",{"title":110,"path":111,"stem":112,"icon":113},"AutoFilter","\u002Fdocs\u002Flearn-and-explore\u002Ffeature-guides\u002Fautofilter","1.docs\u002F1.learn-and-explore\u002F1.feature-guides\u002Fautofilter","i-lucide-filter",{"title":115,"path":116,"stem":117,"icon":118},"Backup-Connector","\u002Fdocs\u002Flearn-and-explore\u002Ffeature-guides\u002Fbackupconnector","1.docs\u002F1.learn-and-explore\u002F1.feature-guides\u002Fbackupconnector","i-lucide-spline",{"title":120,"path":121,"stem":122,"icon":123},"BitType Skill with CostModel","\u002Fdocs\u002Flearn-and-explore\u002Ffeature-guides\u002Fbittype_condition","1.docs\u002F1.learn-and-explore\u002F1.feature-guides\u002Fbittype_condition","i-lucide-cpu",{"title":125,"path":126,"stem":127,"icon":128},"Clustering","\u002Fdocs\u002Flearn-and-explore\u002Ffeature-guides\u002Fclustering_construction","1.docs\u002F1.learn-and-explore\u002F1.feature-guides\u002Fclustering_construction","i-lucide-chart-network",{"title":130,"path":131,"stem":132,"icon":133},"CO2-Emission","\u002Fdocs\u002Flearn-and-explore\u002Ffeature-guides\u002Fco2_emission","1.docs\u002F1.learn-and-explore\u002F1.feature-guides\u002Fco2_emission","i-lucide-trees",{"title":135,"path":136,"stem":137,"icon":138},"Comparison Tool","\u002Fdocs\u002Flearn-and-explore\u002Ffeature-guides\u002Fcomparison_tool","1.docs\u002F1.learn-and-explore\u002F1.feature-guides\u002Fcomparison_tool","i-lucide-scale",{"title":140,"path":141,"stem":142,"icon":143},"Flexible Start Time","\u002Fdocs\u002Flearn-and-explore\u002Ffeature-guides\u002Fflextime","1.docs\u002F1.learn-and-explore\u002F1.feature-guides\u002Fflextime","i-lucide-clock",{"title":145,"path":146,"stem":147,"icon":32},"JOpt-Sandboxes","\u002Fdocs\u002Flearn-and-explore\u002Ffeature-guides\u002Fjopt-sandboxes","1.docs\u002F1.learn-and-explore\u002F1.feature-guides\u002Fjopt-sandboxes",{"title":149,"path":150,"stem":151,"icon":152},"MagnetoCondition (MagnetoNodeConstraint)","\u002Fdocs\u002Flearn-and-explore\u002Ffeature-guides\u002Fmagnetocondition","1.docs\u002F1.learn-and-explore\u002F1.feature-guides\u002FmagnetoCondition","i-lucide-magnet",{"title":154,"path":155,"stem":156,"icon":157},"Manufacturing Planning via PND","\u002Fdocs\u002Flearn-and-explore\u002Ffeature-guides\u002Fmanifacturing_planning","1.docs\u002F1.learn-and-explore\u002F1.feature-guides\u002Fmanifacturing_planning","i-lucide-factory",{"title":159,"path":160,"stem":161,"icon":162},"Open Assessor","\u002Fdocs\u002Flearn-and-explore\u002Ffeature-guides\u002Fopen_assessor","1.docs\u002F1.learn-and-explore\u002F1.feature-guides\u002Fopen_assessor","i-lucide-puzzle",{"title":164,"path":165,"stem":166,"icon":167},"Optimization Properties","\u002Fdocs\u002Flearn-and-explore\u002Ffeature-guides\u002Foptimization_properties","1.docs\u002F1.learn-and-explore\u002F1.feature-guides\u002Foptimization_properties","i-lucide-settings",{"title":169,"path":170,"stem":171,"icon":172},"Overnight Stay","\u002Fdocs\u002Flearn-and-explore\u002Ffeature-guides\u002Fovernight_stay","1.docs\u002F1.learn-and-explore\u002F1.feature-guides\u002Fovernight_stay","i-lucide-moon",{"title":174,"path":175,"stem":176,"icon":27},"Performance Mode","\u002Fdocs\u002Flearn-and-explore\u002Ffeature-guides\u002Fperformance_mode","1.docs\u002F1.learn-and-explore\u002F1.feature-guides\u002Fperformance_mode",{"title":178,"path":179,"stem":180,"icon":72},"Pick up and delivery","\u002Fdocs\u002Flearn-and-explore\u002Ffeature-guides\u002Fpickup_and_delivery","1.docs\u002F1.learn-and-explore\u002F1.feature-guides\u002Fpickup_and_delivery",{"title":182,"path":183,"stem":184,"icon":185},"Pillar Nodes (CapturedNodes)","\u002Fdocs\u002Flearn-and-explore\u002Ffeature-guides\u002Fpillar_nodes","1.docs\u002F1.learn-and-explore\u002F1.feature-guides\u002Fpillar_nodes","i-lucide-lock",{"title":187,"path":188,"stem":189,"icon":190},"Quantum Construction Plugin (D-Wave)","\u002Fdocs\u002Flearn-and-explore\u002Ffeature-guides\u002Fquantum_dwave_plugin_featureguide","1.docs\u002F1.learn-and-explore\u002F1.feature-guides\u002Fquantum_dwave_plugin_featureguide","i-lucide-atom",{"title":192,"path":193,"stem":194,"icon":195},"Reactive Events & Streams","\u002Fdocs\u002Flearn-and-explore\u002Ffeature-guides\u002Freactive_events","1.docs\u002F1.learn-and-explore\u002F1.feature-guides\u002Freactive_events","i-lucide-radio",{"title":197,"path":198,"stem":199,"icon":200},"Return To Start","\u002Fdocs\u002Flearn-and-explore\u002Ffeature-guides\u002Freturn_to_start","1.docs\u002F1.learn-and-explore\u002F1.feature-guides\u002Freturn_to_start","i-lucide-undo-2",{"title":202,"path":203,"stem":204,"icon":205},"Skill with Cost Model","\u002Fdocs\u002Flearn-and-explore\u002Ffeature-guides\u002Fskill_costmodel","1.docs\u002F1.learn-and-explore\u002F1.feature-guides\u002Fskill_costmodel","i-lucide-pocket-knife",{"title":207,"path":208,"stem":209,"icon":67},"ZoneCodes & Territories","\u002Fdocs\u002Flearn-and-explore\u002Ffeature-guides\u002Fzonecodes","1.docs\u002F1.learn-and-explore\u002F1.feature-guides\u002Fzonecodes",{"title":211,"path":212,"stem":213,"icon":214},"Zone Crossing Penalization","\u002Fdocs\u002Flearn-and-explore\u002Ffeature-guides\u002Fzonecrossing","1.docs\u002F1.learn-and-explore\u002F1.feature-guides\u002Fzonecrossing","i-lucide-land-plot",{"title":216,"icon":6,"path":217,"stem":218,"children":219,"page":6},"Special","\u002Fdocs\u002Flearn-and-explore\u002Fspecial","1.docs\u002F1.learn-and-explore\u002F1.special",[220],{"title":221,"path":222,"stem":223,"icon":224},"Special features","\u002Fdocs\u002Flearn-and-explore\u002Fspecial\u002Fspecial_features","1.docs\u002F1.learn-and-explore\u002F1.special\u002Fspecial_features","i-lucide-star",{"title":226,"icon":6,"path":227,"stem":228,"children":229,"page":6},"REST","\u002Fdocs\u002Flearn-and-explore\u002Frest","1.docs\u002F1.learn-and-explore\u002F2.REST",[230,235,240],{"title":231,"path":232,"stem":233,"icon":234},"REST-Clients for JOpt.TourOptimizer","\u002Fdocs\u002Flearn-and-explore\u002Frest\u002Frest_client_touroptimizer","1.docs\u002F1.learn-and-explore\u002F2.REST\u002F0.rest_client_touroptimizer","i-lucide-users",{"title":236,"path":237,"stem":238,"icon":239},"TourOptimizer REST Server","\u002Fdocs\u002Flearn-and-explore\u002Frest\u002Frest-server-touroptimizer","1.docs\u002F1.learn-and-explore\u002F2.REST\u002F1.rest-server-touroptimizer","i-lucide-server",{"title":241,"path":242,"stem":243,"icon":244},"TourOptimizer Production Guide","\u002Fdocs\u002Flearn-and-explore\u002Frest\u002Ftouroptimizer-faf","1.docs\u002F1.learn-and-explore\u002F2.REST\u002F2.touroptimizer-faf","i-lucide-shield",{"title":246,"icon":6,"path":247,"stem":248,"children":249,"page":6},"Base Examples","\u002Fdocs\u002Flearn-and-explore\u002Fbase-examples","1.docs\u002F1.learn-and-explore\u002F3.base-examples",[250,255,259,263,267,271,275,279,283,287],{"title":251,"path":252,"stem":253,"icon":254},"Basic Examples (Java) — JOpt TourOptimizer","\u002Fdocs\u002Flearn-and-explore\u002Fbase-examples\u002Freadme","1.docs\u002F1.learn-and-explore\u002F3.base-examples\u002F0. README","i-lucide-square-terminal",{"title":256,"path":257,"stem":258},"First Optimization — FirstOptimizationExample","\u002Fdocs\u002Flearn-and-explore\u002Fbase-examples\u002Ffirstoptimizationexample","1.docs\u002F1.learn-and-explore\u002F3.base-examples\u002F1. FirstOptimizationExample",{"title":260,"path":261,"stem":262},"Event Nodes — Non-Geographical Tasks in JOpt TourOptimizer","\u002Fdocs\u002Flearn-and-explore\u002Fbase-examples\u002Feventnode","1.docs\u002F1.learn-and-explore\u002F3.base-examples\u002FEventNode",{"title":264,"path":265,"stem":266},"Export to KML — Export2KMLExample","\u002Fdocs\u002Flearn-and-explore\u002Fbase-examples\u002Fexport2kmlexample","1.docs\u002F1.learn-and-explore\u002F3.base-examples\u002FExport2KMLExample",{"title":268,"path":269,"stem":270},"External Node Connection — Custom Distances and Driving Times","\u002Fdocs\u002Flearn-and-explore\u002Fbase-examples\u002Fexternalnodeconnection","1.docs\u002F1.learn-and-explore\u002F3.base-examples\u002FExternalNodeConnection",{"title":272,"path":273,"stem":274},"Load and Save Optimization Snapshots (JSON \u002F JSON.BZ2) — JOpt TourOptimizer (Java)","\u002Fdocs\u002Flearn-and-explore\u002Fbase-examples\u002Floadandsaveoptimization","1.docs\u002F1.learn-and-explore\u002F3.base-examples\u002FLoadAndSaveOptimization",{"title":276,"path":277,"stem":278},"Pillar Nodes (Captured Nodes) — Hard Constraints Fulfilled by Architecture","\u002Fdocs\u002Flearn-and-explore\u002Fbase-examples\u002Fpillar","1.docs\u002F1.learn-and-explore\u002F3.base-examples\u002FPillar",{"title":280,"path":281,"stem":282},"Read Out an Optimization Result — IOptimizationResult in Practice","\u002Fdocs\u002Flearn-and-explore\u002Fbase-examples\u002Freadoutresult","1.docs\u002F1.learn-and-explore\u002F3.base-examples\u002FReadOutResult",{"title":284,"path":285,"stem":286},"Recommended Implementation Patterns (Java) — JOpt TourOptimizer Examples","\u002Fdocs\u002Flearn-and-explore\u002Fbase-examples\u002Frecommendedimplementation","1.docs\u002F1.learn-and-explore\u002F3.base-examples\u002FRecommendedImplementation",{"title":288,"path":289,"stem":290},"Setting the JOpt License — setLicenseJSON(...) in Java","\u002Fdocs\u002Flearn-and-explore\u002Fbase-examples\u002Fsetlicense","1.docs\u002F1.learn-and-explore\u002F3.base-examples\u002FSetLicense",{"title":292,"path":293,"stem":294,"children":295,"page":6},"Advanced Examples","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples",[296,300,304,308,312,316,320,324,328,332,336,340,344,348,352,356,360,364,368,372,376,380,384,388,392,396,400,404,408,412,416,420,424],{"title":297,"path":298,"stem":299,"icon":254},"Advanced Examples (Java) — JOpt TourOptimizer","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples\u002Freadme","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples\u002F2. README",{"title":301,"path":302,"stem":303},"Alternate Destination — AlternateDestinationExample","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples\u002Falternatedestinationexample","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples\u002FAlternateDestinationExample",{"title":305,"path":306,"stem":307},"AutoFilter — Infeasibility Management by Excluding Violation-Prone Nodes","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples\u002Fautofilter","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples\u002FAutoFilter",{"title":309,"path":310,"stem":311},"Binding and Excluding Resource Conditions (Mandatory\u002FPreferred vs. Banned\u002FUnPreferred)","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples\u002Fbindingexcludingresourcecondition","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples\u002FBindingExcludingResourceCondition",{"title":313,"path":314,"stem":315},"BitTypeWithExpertiseCondition","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples\u002Fbittypewithexpertiseconditionandcostmodelexample","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples\u002FBitTypeWithExpertiseConditionAndCostModelExample",{"title":317,"path":318,"stem":319},"Bridge & Tunnel Crossing Penalization with ZoneNumbers","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples\u002Fbridgetunnelcrossingzonenumberconstraint","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples\u002FBridgeTunnelCrossingZoneNumberConstraint",{"title":321,"path":322,"stem":323},"Build an OptimizationConfig fluently and run it via the JSONOptimization engine","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples\u002Fbuilderpatternexample","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples\u002FBuilderPatternExample",{"title":325,"path":326,"stem":327},"CO2-Emission Optimization — From Reporting to an Explicit Optimization Goal","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples\u002Fco2emissionoptimization","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples\u002FCO2EmissionOptimization",{"title":329,"path":330,"stem":331},"CapacityCheck - Input plausibility: capacity check for working time vs required workload","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples\u002Fcapacitycheckexample","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples\u002FCapacityCheckExample",{"title":333,"path":334,"stem":335},"Clustering During Construction — High-Quality Starting Solutions at Scale","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples\u002Fclustering","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples\u002FClustering",{"title":337,"path":338,"stem":339},"Coupled Split Delivery — CoupledFlexLoadSplitDeliveryExample - SDO-Opimization","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples\u002Fcoupledflexloadsplitdelivery","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples\u002FCoupledFlexLoadSplitDelivery",{"title":341,"path":342,"stem":343},"ExtraInfo — Attaching Domain Metadata to Nodes and Resources","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples\u002Fextrainfo","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples\u002FExtraInfo",{"title":345,"path":346,"stem":347},"First\u002FLast Node in Route — Softly Steering Route Anchors via Importance","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples\u002Ffirstlastnode","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples\u002FFirstLastNode",{"title":349,"path":350,"stem":351},"IncludeVisitDuration — “Arrive Within OpeningHours” vs. “Finish Within OpeningHours”","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples\u002Fincludevisitduration","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples\u002FIncludeVisitDuration",{"title":353,"path":354,"stem":355},"JointVisitDuration — Modeling “Co-located” Stops with Reduced Service Time","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples\u002Fjointvisitduration","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples\u002FJointVisitDuration",{"title":357,"path":358,"stem":359},"Magnetic Condition - Node-Node Soft Condition","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples\u002Fmagneticsoftcondition","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples\u002FMagneticSoftCondition",{"title":361,"path":362,"stem":363},"Open vs. Closed Route — Returning to Depot or Ending “Where It Makes Sense”","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples\u002Fopenclosedroute","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples\u002FOpenClosedRoute",{"title":365,"path":366,"stem":367},"OpenLocationCode — Using Plus Codes Instead of Latitude\u002FLongitude","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples\u002Fopenlocationcode","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples\u002FOpenLocationCode",{"title":369,"path":370,"stem":371},"OptimizationProgress — Controlling Progress Callbacks and Forcing Progress Snapshots","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples\u002Foptimizationprogress","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples\u002FOptimizationProgress",{"title":373,"path":374,"stem":375},"OvernightStay — Allowing Multi-Day Routes With “Stay Out” Policies","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples\u002Fovernightstay","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples\u002FOvernightStay",{"title":377,"path":378,"stem":379},"Pickup & Delivery (PND) in JOpt.TourOptimizer","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples\u002Fpnd","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples\u002FPND",{"title":381,"path":382,"stem":383},"PerformanceMode — Faster Genetic Optimization With Reduced Operators","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples\u002Fperformancemode","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples\u002FPerformanceMode",{"title":385,"path":386,"stem":387},"Read Out Full Progress — Structured KPIs During Optimization","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples\u002Freadoutfullprogress","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples\u002FReadOutFullProgress",{"title":389,"path":390,"stem":391},"Relations — Coupling Nodes Across Routes, Resources, and Time","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples\u002Frelations","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples\u002FRelations",{"title":393,"path":394,"stem":395},"RequestResult — Pulling an Intermediate Solution While Optimization Is Still Running","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples\u002Frequestresult","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples\u002FRequestResult",{"title":397,"path":398,"stem":399},"Resource Connection Efficiency — Modeling “Fast” and “Slow” Vehicles via Travel-Time Scaling","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples\u002Fresourceconnectionefficiency","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples\u002FResourceConnectionEfficiency",{"title":401,"path":402,"stem":403},"ResourceConstraintAliasId — Treating Multiple Resources as One Logical Unit in Constraints","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples\u002Fresourceconstraintaliasid","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples\u002FResourceConstraintAliasId",{"title":405,"path":406,"stem":407},"ResourceType (Skills) — Hard\u002FSoft Matching, Expertise Levels, Cost Models, and High-Performance Bitsets","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples\u002Fresourcetype","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples\u002FResourceType",{"title":409,"path":410,"stem":411},"Resource Visit Duration Efficiency — Modeling Faster (or Slower) Resources","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples\u002Fresourcevisitdurationefficiency","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples\u002FResourceVisitDurationEfficiency",{"title":413,"path":414,"stem":415},"Return To Start (Return2Start) — Insert Mandatory Depot Returns Between Visits","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples\u002Freturnstart","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples\u002FReturnStart",{"title":417,"path":418,"stem":419},"RunOptimizationInLoop — Stopping a Solver Stage After N Loops","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples\u002Frunoptimizationinloop","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples\u002FRunOptimizationInLoop",{"title":421,"path":422,"stem":423},"Wait On Early Arrival (First Node) — Prevent “Working Before Shift Start” Only at Route Start","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples\u002Fwaitonearlyarrivalfirstnode","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples\u002FWaitOnEarlyArrivalFirstNode",{"title":425,"path":426,"stem":427},"ZoneCodes — Defining Territories for Resources (and Why It Scales)","\u002Fdocs\u002Flearn-and-explore\u002Fadvanced-examples\u002Fzoneconde","1.docs\u002F1.learn-and-explore\u002F4.advanced-examples\u002FZoneConde",{"title":429,"path":430,"stem":431,"children":432,"page":6},"Expert Examples","\u002Fdocs\u002Flearn-and-explore\u002Fexpert-examples","1.docs\u002F1.learn-and-explore\u002F5.expert-examples",[433,437,441,445,449,453,457,461,465,469,473,477,481,485,489,493],{"title":434,"path":435,"stem":436,"icon":254},"Expert Examples (Java) — JOpt TourOptimizer","\u002Fdocs\u002Flearn-and-explore\u002Fexpert-examples\u002Freadme","1.docs\u002F1.learn-and-explore\u002F5.expert-examples\u002F3. README",{"title":438,"path":439,"stem":440},"Compare Result — The Optimization Solution Comparison Tool","\u002Fdocs\u002Flearn-and-explore\u002Fexpert-examples\u002Fcompareresult","1.docs\u002F1.learn-and-explore\u002F5.expert-examples\u002FCompareResult",{"title":442,"path":443,"stem":444},"Connection Store — Time-Dependent Driving Times (Traffic Profiles)","\u002Fdocs\u002Flearn-and-explore\u002Fexpert-examples\u002Fconenctionstore","1.docs\u002F1.learn-and-explore\u002F5.expert-examples\u002FConenctionStore",{"title":446,"path":447,"stem":448},"Create Custom Solution From JSON — Reconstructing a Warm Start from a Serialized Optimization","\u002Fdocs\u002Flearn-and-explore\u002Fexpert-examples\u002Fcreatecustomsolutionfromjson","1.docs\u002F1.learn-and-explore\u002F5.expert-examples\u002FCreateCustomSolutionFromJSON",{"title":450,"path":451,"stem":452},"Custom Cost Convergence — Stop Optimization When Your Metric Has Stabilized","\u002Fdocs\u002Flearn-and-explore\u002Fexpert-examples\u002Fcustomcostconvergence","1.docs\u002F1.learn-and-explore\u002F5.expert-examples\u002FCustomCostConvergence",{"title":454,"path":455,"stem":456},"Custom Node Backup Connector — Custom Distance\u002FTime Calculation for Missing Connections","\u002Fdocs\u002Flearn-and-explore\u002Fexpert-examples\u002Fcustomnodebackupconnector","1.docs\u002F1.learn-and-explore\u002F5.expert-examples\u002FCustomNodeBackUpConnector",{"title":458,"path":459,"stem":460},"Custom Solution — Architecture, Warm-Start Patterns, and Practical Integration","\u002Fdocs\u002Flearn-and-explore\u002Fexpert-examples\u002Fcustomsolution","1.docs\u002F1.learn-and-explore\u002F5.expert-examples\u002FCustomSolution",{"title":462,"path":463,"stem":464},"Extract Build Info — Diagnostics, Reproducibility, and Support-Ready Bug Reports","\u002Fdocs\u002Flearn-and-explore\u002Fexpert-examples\u002Fextractbuildinfo","1.docs\u002F1.learn-and-explore\u002F5.expert-examples\u002FExtractBuildInfo",{"title":466,"path":467,"stem":468},"FlexTime — Flexible Start Time (Positive and Negative)","\u002Fdocs\u002Flearn-and-explore\u002Fexpert-examples\u002Fflextime","1.docs\u002F1.learn-and-explore\u002F5.expert-examples\u002FFlextime",{"title":470,"path":471,"stem":472},"Open Assessor — Node-Level Customization (Custom Node-Level Restrictions)","\u002Fdocs\u002Flearn-and-explore\u002Fexpert-examples\u002Fopenassessornodelevel","1.docs\u002F1.learn-and-explore\u002F5.expert-examples\u002FOpenAssessorNodeLevel",{"title":474,"path":475,"stem":476},"Open Assessor — Route-Level Customization (Custom Route-Level Restrictions)","\u002Fdocs\u002Flearn-and-explore\u002Fexpert-examples\u002Fopenassessorroutelevel","1.docs\u002F1.learn-and-explore\u002F5.expert-examples\u002FOpenAssessorRouteLevel",{"title":478,"path":479,"stem":480},"Optimization Scheme — Algorithm Selection and Execution Pipeline","\u002Fdocs\u002Flearn-and-explore\u002Fexpert-examples\u002Foptimizationschemealgorithmselection","1.docs\u002F1.learn-and-explore\u002F5.expert-examples\u002FOptimizationSchemeAlgorithmSelection",{"title":482,"path":483,"stem":484},"Optimization Scheme — Custom Default Properties (Pipeline Defaults With Safe Overrides)","\u002Fdocs\u002Flearn-and-explore\u002Fexpert-examples\u002Foptimizationschemecustomdefaultproperties","1.docs\u002F1.learn-and-explore\u002F5.expert-examples\u002FOptimizationSchemeCustomDefaultProperties",{"title":486,"path":487,"stem":488},"Optional Nodes — Make “Stopovers” and Optional Tasks First-Class Citizens","\u002Fdocs\u002Flearn-and-explore\u002Fexpert-examples\u002Foptionalnode","1.docs\u002F1.learn-and-explore\u002F5.expert-examples\u002FOptionalNode",{"title":490,"path":491,"stem":492},"Read Out Default Properties — Discover, Audit, and Explain the Solver Configuration Surface","\u002Fdocs\u002Flearn-and-explore\u002Fexpert-examples\u002Freadoutdefaultproperties","1.docs\u002F1.learn-and-explore\u002F5.expert-examples\u002FReadOutDefaultProperties",{"title":494,"path":495,"stem":496},"Uncaught Exception Handling — Fail Fast, Fail Deterministically, and Still Return a Useful Signal","\u002Fdocs\u002Flearn-and-explore\u002Fexpert-examples\u002Funcaughtexceptionhandling","1.docs\u002F1.learn-and-explore\u002F5.expert-examples\u002FUncaughtExceptionHandling",{"title":498,"path":499,"stem":500,"children":501,"page":6},"Rest Examples","\u002Fdocs\u002Flearn-and-explore\u002Frest-examples","1.docs\u002F1.learn-and-explore\u002F6.rest-examples",[502,506,510],{"title":503,"path":504,"stem":505,"icon":254},"Rest Examples (Java) — JOpt TourOptimizer","\u002Fdocs\u002Flearn-and-explore\u002Frest-examples\u002Frest-examples-readme","1.docs\u002F1.learn-and-explore\u002F6.rest-examples\u002F0. rest-examples-readme",{"title":507,"path":508,"stem":509},"Creating REST TourOptimizer JSON Input from a Java Optimization — JOpt TourOptimizer","\u002Fdocs\u002Flearn-and-explore\u002Frest-examples\u002Fcreateresttouroptimizerinput","1.docs\u002F1.learn-and-explore\u002F6.rest-examples\u002FCreateRestTourOptimizerInput",{"title":511,"path":512,"stem":513},"Reading a REST JSON Config and Running It Locally — JOpt TourOptimizer","\u002Fdocs\u002Flearn-and-explore\u002Frest-examples\u002Freadrestjsonconfigandrun","1.docs\u002F1.learn-and-explore\u002F6.rest-examples\u002FReadRestJsonConfigAndRun",{"title":515,"icon":6,"path":516,"stem":517,"children":518,"page":6},"System Integration","\u002Fdocs\u002Fsystem-integration","1.docs\u002F2.system-integration",[519,529],{"title":520,"icon":6,"path":521,"stem":522,"children":523,"page":6},"System Architecture","\u002Fdocs\u002Fsystem-integration\u002Farchitecture","1.docs\u002F2.system-integration\u002F0.architecture",[524],{"title":525,"path":526,"stem":527,"icon":528},"System Architecture - JOpt platform","\u002Fdocs\u002Fsystem-integration\u002Farchitecture\u002Fsystem_architecture","1.docs\u002F2.system-integration\u002F0.architecture\u002Fsystem_architecture","i-lucide-network",{"title":530,"icon":6,"path":531,"stem":532,"children":533,"page":6},"Container Deployment","\u002Fdocs\u002Fsystem-integration\u002Fcontainerized-deployment","1.docs\u002F2.system-integration\u002F1.containerized-deployment",[534,538,542,546,551,555],{"title":535,"path":536,"stem":537,"icon":254},"Linux - JOpt TourOptimizer on Linux","\u002Fdocs\u002Fsystem-integration\u002Fcontainerized-deployment\u002Fjopt-container-linux","1.docs\u002F2.system-integration\u002F1.containerized-deployment\u002F1.jopt-container-linux",{"title":539,"path":540,"stem":541,"icon":224},"WSL\u002FWindows - Docker Installation","\u002Fdocs\u002Fsystem-integration\u002Fcontainerized-deployment\u002Fdocker-installation-win","1.docs\u002F2.system-integration\u002F1.containerized-deployment\u002F2.docker-installation-win",{"title":543,"path":544,"stem":545,"icon":37},"Windows - JOpt TourOptimizer on Windows Platforms","\u002Fdocs\u002Fsystem-integration\u002Fcontainerized-deployment\u002Fjopt-container-win","1.docs\u002F2.system-integration\u002F1.containerized-deployment\u002F2.jopt-container-win",{"title":547,"path":548,"stem":549,"icon":550},"macOS - JOpt TourOptimizer on Apple Platforms (macOS)","\u002Fdocs\u002Fsystem-integration\u002Fcontainerized-deployment\u002Fjopt-container-macos","1.docs\u002F2.system-integration\u002F1.containerized-deployment\u002F3.jopt-container-macos","i-lucide-apple",{"title":552,"path":553,"stem":554,"icon":239},"Kubernetes - JOpt TourOptimizer","\u002Fdocs\u002Fsystem-integration\u002Fcontainerized-deployment\u002Fkubertnetes","1.docs\u002F2.system-integration\u002F1.containerized-deployment\u002F4.kubertnetes",{"title":556,"path":557,"stem":558,"icon":559},"Terraform - Enterprise Deployment","\u002Fdocs\u002Fsystem-integration\u002Fcontainerized-deployment\u002Fterraform","1.docs\u002F2.system-integration\u002F1.containerized-deployment\u002F5.terraform","i-lucide-layers",[561],{"title":562,"icon":6,"path":563,"stem":564,"children":565,"page":6},"Portal Documentation","\u002Fportal\u002Fdocs","2.portal-docs",[566,576],{"title":567,"icon":6,"path":568,"stem":569,"children":570,"page":6},"Home","\u002Fportal\u002Fdocs\u002Fhome","2.portal-docs\u002F0.home",[571],{"title":572,"path":573,"stem":574,"icon":185,"children":575},"Welcome","\u002Fportal\u002Fdocs\u002Fhome\u002Fwelcome","2.portal-docs\u002F0.home\u002Fwelcome",[],{"title":577,"icon":6,"path":578,"stem":579,"children":580,"page":6},"Support","\u002Fportal\u002Fdocs\u002Fsupport","2.portal-docs\u002F1.support",[581],{"title":582,"path":583,"stem":584,"icon":104,"children":585},"Extended free License","\u002Fportal\u002Fdocs\u002Fsupport\u002Fextended_free_license","2.portal-docs\u002F1.support\u002F0.extended_free_license",[],{"id":587,"title":69,"body":588,"description":2933,"extension":2934,"meta":2935,"navigation":2936,"path":70,"seo":2937,"stem":71,"__hash__":2938},"docs\u002F1.docs\u002F0.getting-started\u002F2.tutorials\u002FResources.md",{"type":589,"value":590,"toc":2907},"minimark",[591,595,600,604,612,615,619,684,686,689,698,703,1220,1223,1333,1337,1340,1344,1347,1350,1356,1628,1635,1686,1689,1723,1726,1729,1732,1735,1760,1767,1770,1773,1776,1815,1822,1825,1828,1831,1879,1915,1918,1984,1987,1990,1994,2077,2084,2088,2197,2201,2205,2231,2234,2238,2335,2342,2346,2349,2427,2430,2433,2668,2675,2685,2688,2691,2712,2715,2717,2720,2872,2879,2887,2889,2893,2903],[592,593,69],"h1",{"id":594},"resources",[596,597,599],"h2",{"id":598},"the-actors-performing-work","The actors performing work",[601,602,603],"p",{},"A Resource represents a vehicle, a technician, a driver, or any entity that visits nodes and performs tasks. Resources define where work starts, when it can happen, and what capacity is available. The optimizer assigns nodes to resources and sequences them into routes that respect working hours, travel limits, and all other constraints.",[601,605,606,607,611],{},"The primary resource type in JOpt.TourOptimizer is the ",[608,609,610],"code",{},"CapacityResource",". It models a mobile actor with a home location, working hours, maximum working time, maximum travel distance, and optional capacity for pickup and delivery scenarios.",[613,614],"hr",{},[596,616,618],{"id":617},"overview","Overview",[620,621,622,630,636,642,648,654,660,666,672,678],"ul",{},[623,624,625],"li",{},[626,627,629],"a",{"href":628},"#capacityresource-the-primary-type","CapacityResource: the primary type",[623,631,632],{},[626,633,635],{"href":634},"#constructor-parameters","Constructor parameters",[623,637,638],{},[626,639,641],{"href":640},"#working-hours","Working hours",[623,643,644],{},[626,645,647],{"href":646},"#maximum-working-time","Maximum working time",[623,649,650],{},[626,651,653],{"href":652},"#maximum-distance","Maximum distance",[623,655,656],{},[626,657,659],{"href":658},"#cost-model","Cost model",[623,661,662],{},[626,663,665],{"href":664},"#additional-capabilities","Additional capabilities",[623,667,668],{},[626,669,671],{"href":670},"#builder-pattern","Builder pattern",[623,673,674],{},[626,675,677],{"href":676},"#adding-resources-to-the-optimization","Adding resources to the optimization",[623,679,680],{},[626,681,683],{"href":682},"#summary","Summary",[613,685],{},[596,687,629],{"id":688},"capacityresource-the-primary-type",[601,690,691,693,694,697],{},[608,692,610],{}," implements the ",[608,695,696],{},"IResource"," interface and is the standard resource type for all routing and scheduling scenarios. It models a resource with a home location (latitude\u002Flongitude), one or more working hours defining when it can operate, and limits on working time and travel distance.",[699,700,702],"h3",{"id":701},"basic-construction","Basic construction",[704,705,710],"pre",{"className":706,"code":707,"language":708,"meta":709,"style":709},"language-java shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","Duration maxWorkingTime = Duration.ofHours(9);\nQuantity\u003CLength> maxDistance = Quantities.getQuantity(1200.0, KILO(METRE));\n\nList\u003CIWorkingHours> workingHours = new ArrayList\u003C>();\nworkingHours.add(new WorkingHours(\n    ZonedDateTime.of(2020, MAY.getValue(), 6, 8, 0, 0, 0, ZoneId.of(\"Europe\u002FBerlin\")),\n    ZonedDateTime.of(2020, MAY.getValue(), 6, 17, 0, 0, 0, ZoneId.of(\"Europe\u002FBerlin\"))));\nworkingHours.add(new WorkingHours(\n    ZonedDateTime.of(2020, MAY.getValue(), 7, 8, 0, 0, 0, ZoneId.of(\"Europe\u002FBerlin\")),\n    ZonedDateTime.of(2020, MAY.getValue(), 7, 17, 0, 0, 0, ZoneId.of(\"Europe\u002FBerlin\"))));\n\nIResource jack = new CapacityResource(\n    \"Jack\",              \u002F\u002F unique ID\n    50.775346,           \u002F\u002F latitude (home location)\n    6.083887,            \u002F\u002F longitude (home location)\n    maxWorkingTime,      \u002F\u002F maximum working time per shift\n    maxDistance,          \u002F\u002F maximum travel distance per shift\n    workingHours         \u002F\u002F list of working hours\n);\n","java","",[608,711,712,749,796,803,831,853,926,987,1004,1064,1123,1128,1145,1162,1173,1184,1195,1206,1215],{"__ignoreMap":709},[713,714,717,721,725,729,732,735,739,742,746],"span",{"class":715,"line":716},"line",1,[713,718,720],{"class":719},"spNyl","Duration",[713,722,724],{"class":723},"sTEyZ"," maxWorkingTime ",[713,726,728],{"class":727},"sMK4o","=",[713,730,731],{"class":723}," Duration",[713,733,734],{"class":727},".",[713,736,738],{"class":737},"s2Zo4","ofHours",[713,740,741],{"class":727},"(",[713,743,745],{"class":744},"sbssI","9",[713,747,748],{"class":727},");\n",[713,750,752,755,758,761,764,767,769,772,774,777,779,782,785,788,790,793],{"class":715,"line":751},2,[713,753,754],{"class":719},"Quantity",[713,756,757],{"class":727},"\u003C",[713,759,760],{"class":719},"Length",[713,762,763],{"class":727},">",[713,765,766],{"class":723}," maxDistance ",[713,768,728],{"class":727},[713,770,771],{"class":723}," Quantities",[713,773,734],{"class":727},[713,775,776],{"class":737},"getQuantity",[713,778,741],{"class":727},[713,780,781],{"class":744},"1200.0",[713,783,784],{"class":727},",",[713,786,787],{"class":737}," KILO",[713,789,741],{"class":727},[713,791,792],{"class":723},"METRE",[713,794,795],{"class":727},"));\n",[713,797,799],{"class":715,"line":798},3,[713,800,802],{"emptyLinePlaceholder":801},true,"\n",[713,804,806,809,811,814,816,819,821,825,828],{"class":715,"line":805},4,[713,807,808],{"class":719},"List",[713,810,757],{"class":727},[713,812,813],{"class":719},"IWorkingHours",[713,815,763],{"class":727},[713,817,818],{"class":723}," workingHours ",[713,820,728],{"class":727},[713,822,824],{"class":823},"s7zQu"," new",[713,826,827],{"class":719}," ArrayList",[713,829,830],{"class":727},"\u003C>();\n",[713,832,834,837,839,842,844,847,850],{"class":715,"line":833},5,[713,835,836],{"class":723},"workingHours",[713,838,734],{"class":727},[713,840,841],{"class":737},"add",[713,843,741],{"class":727},[713,845,846],{"class":823},"new",[713,848,849],{"class":737}," WorkingHours",[713,851,852],{"class":727},"(\n",[713,854,856,859,861,864,866,869,871,874,876,879,882,885,887,890,892,895,897,899,901,903,905,908,910,912,914,917,921,923],{"class":715,"line":855},6,[713,857,858],{"class":723},"    ZonedDateTime",[713,860,734],{"class":727},[713,862,863],{"class":737},"of",[713,865,741],{"class":727},[713,867,868],{"class":744},"2020",[713,870,784],{"class":727},[713,872,873],{"class":723}," MAY",[713,875,734],{"class":727},[713,877,878],{"class":737},"getValue",[713,880,881],{"class":727},"(),",[713,883,884],{"class":744}," 6",[713,886,784],{"class":727},[713,888,889],{"class":744}," 8",[713,891,784],{"class":727},[713,893,894],{"class":744}," 0",[713,896,784],{"class":727},[713,898,894],{"class":744},[713,900,784],{"class":727},[713,902,894],{"class":744},[713,904,784],{"class":727},[713,906,907],{"class":723}," ZoneId",[713,909,734],{"class":727},[713,911,863],{"class":737},[713,913,741],{"class":727},[713,915,916],{"class":727},"\"",[713,918,920],{"class":919},"sfazB","Europe\u002FBerlin",[713,922,916],{"class":727},[713,924,925],{"class":727},")),\n",[713,927,929,931,933,935,937,939,941,943,945,947,949,951,953,956,958,960,962,964,966,968,970,972,974,976,978,980,982,984],{"class":715,"line":928},7,[713,930,858],{"class":723},[713,932,734],{"class":727},[713,934,863],{"class":737},[713,936,741],{"class":727},[713,938,868],{"class":744},[713,940,784],{"class":727},[713,942,873],{"class":723},[713,944,734],{"class":727},[713,946,878],{"class":737},[713,948,881],{"class":727},[713,950,884],{"class":744},[713,952,784],{"class":727},[713,954,955],{"class":744}," 17",[713,957,784],{"class":727},[713,959,894],{"class":744},[713,961,784],{"class":727},[713,963,894],{"class":744},[713,965,784],{"class":727},[713,967,894],{"class":744},[713,969,784],{"class":727},[713,971,907],{"class":723},[713,973,734],{"class":727},[713,975,863],{"class":737},[713,977,741],{"class":727},[713,979,916],{"class":727},[713,981,920],{"class":919},[713,983,916],{"class":727},[713,985,986],{"class":727},"))));\n",[713,988,990,992,994,996,998,1000,1002],{"class":715,"line":989},8,[713,991,836],{"class":723},[713,993,734],{"class":727},[713,995,841],{"class":737},[713,997,741],{"class":727},[713,999,846],{"class":823},[713,1001,849],{"class":737},[713,1003,852],{"class":727},[713,1005,1007,1009,1011,1013,1015,1017,1019,1021,1023,1025,1027,1030,1032,1034,1036,1038,1040,1042,1044,1046,1048,1050,1052,1054,1056,1058,1060,1062],{"class":715,"line":1006},9,[713,1008,858],{"class":723},[713,1010,734],{"class":727},[713,1012,863],{"class":737},[713,1014,741],{"class":727},[713,1016,868],{"class":744},[713,1018,784],{"class":727},[713,1020,873],{"class":723},[713,1022,734],{"class":727},[713,1024,878],{"class":737},[713,1026,881],{"class":727},[713,1028,1029],{"class":744}," 7",[713,1031,784],{"class":727},[713,1033,889],{"class":744},[713,1035,784],{"class":727},[713,1037,894],{"class":744},[713,1039,784],{"class":727},[713,1041,894],{"class":744},[713,1043,784],{"class":727},[713,1045,894],{"class":744},[713,1047,784],{"class":727},[713,1049,907],{"class":723},[713,1051,734],{"class":727},[713,1053,863],{"class":737},[713,1055,741],{"class":727},[713,1057,916],{"class":727},[713,1059,920],{"class":919},[713,1061,916],{"class":727},[713,1063,925],{"class":727},[713,1065,1067,1069,1071,1073,1075,1077,1079,1081,1083,1085,1087,1089,1091,1093,1095,1097,1099,1101,1103,1105,1107,1109,1111,1113,1115,1117,1119,1121],{"class":715,"line":1066},10,[713,1068,858],{"class":723},[713,1070,734],{"class":727},[713,1072,863],{"class":737},[713,1074,741],{"class":727},[713,1076,868],{"class":744},[713,1078,784],{"class":727},[713,1080,873],{"class":723},[713,1082,734],{"class":727},[713,1084,878],{"class":737},[713,1086,881],{"class":727},[713,1088,1029],{"class":744},[713,1090,784],{"class":727},[713,1092,955],{"class":744},[713,1094,784],{"class":727},[713,1096,894],{"class":744},[713,1098,784],{"class":727},[713,1100,894],{"class":744},[713,1102,784],{"class":727},[713,1104,894],{"class":744},[713,1106,784],{"class":727},[713,1108,907],{"class":723},[713,1110,734],{"class":727},[713,1112,863],{"class":737},[713,1114,741],{"class":727},[713,1116,916],{"class":727},[713,1118,920],{"class":919},[713,1120,916],{"class":727},[713,1122,986],{"class":727},[713,1124,1126],{"class":715,"line":1125},11,[713,1127,802],{"emptyLinePlaceholder":801},[713,1129,1131,1133,1136,1138,1140,1143],{"class":715,"line":1130},12,[713,1132,696],{"class":719},[713,1134,1135],{"class":723}," jack ",[713,1137,728],{"class":727},[713,1139,824],{"class":823},[713,1141,1142],{"class":737}," CapacityResource",[713,1144,852],{"class":727},[713,1146,1148,1151,1154,1156,1158],{"class":715,"line":1147},13,[713,1149,1150],{"class":727},"    \"",[713,1152,1153],{"class":919},"Jack",[713,1155,916],{"class":727},[713,1157,784],{"class":727},[713,1159,1161],{"class":1160},"sHwdD","              \u002F\u002F unique ID\n",[713,1163,1165,1168,1170],{"class":715,"line":1164},14,[713,1166,1167],{"class":744},"    50.775346",[713,1169,784],{"class":727},[713,1171,1172],{"class":1160},"           \u002F\u002F latitude (home location)\n",[713,1174,1176,1179,1181],{"class":715,"line":1175},15,[713,1177,1178],{"class":744},"    6.083887",[713,1180,784],{"class":727},[713,1182,1183],{"class":1160},"            \u002F\u002F longitude (home location)\n",[713,1185,1187,1190,1192],{"class":715,"line":1186},16,[713,1188,1189],{"class":723},"    maxWorkingTime",[713,1191,784],{"class":727},[713,1193,1194],{"class":1160},"      \u002F\u002F maximum working time per shift\n",[713,1196,1198,1201,1203],{"class":715,"line":1197},17,[713,1199,1200],{"class":723},"    maxDistance",[713,1202,784],{"class":727},[713,1204,1205],{"class":1160},"          \u002F\u002F maximum travel distance per shift\n",[713,1207,1209,1212],{"class":715,"line":1208},18,[713,1210,1211],{"class":723},"    workingHours         ",[713,1213,1214],{"class":1160},"\u002F\u002F list of working hours\n",[713,1216,1218],{"class":715,"line":1217},19,[713,1219,748],{"class":727},[596,1221,635],{"id":1222},"constructor-parameters",[1224,1225,1226,1242],"table",{},[1227,1228,1229],"thead",{},[1230,1231,1232,1236,1239],"tr",{},[1233,1234,1235],"th",{},"Parameter",[1233,1237,1238],{},"Type",[1233,1240,1241],{},"Description",[1243,1244,1245,1261,1276,1290,1304,1319],"tbody",{},[1230,1246,1247,1253,1258],{},[1248,1249,1250],"td",{},[608,1251,1252],{},"id",[1248,1254,1255],{},[608,1256,1257],{},"String",[1248,1259,1260],{},"Unique identifier for the resource (e.g. \"Jack\", \"Truck-42\")",[1230,1262,1263,1268,1273],{},[1248,1264,1265],{},[608,1266,1267],{},"latitude",[1248,1269,1270],{},[608,1271,1272],{},"double",[1248,1274,1275],{},"Latitude of the resource's home\u002Fstart location",[1230,1277,1278,1283,1287],{},[1248,1279,1280],{},[608,1281,1282],{},"longitude",[1248,1284,1285],{},[608,1286,1272],{},[1248,1288,1289],{},"Longitude of the resource's home\u002Fstart location",[1230,1291,1292,1297,1301],{},[1248,1293,1294],{},[608,1295,1296],{},"maxWorkingTime",[1248,1298,1299],{},[608,1300,720],{},[1248,1302,1303],{},"Maximum working time per shift (soft constraint)",[1230,1305,1306,1311,1316],{},[1248,1307,1308],{},[608,1309,1310],{},"maxDistance",[1248,1312,1313],{},[608,1314,1315],{},"Quantity\u003CLength>",[1248,1317,1318],{},"Maximum travel distance per shift (soft constraint)",[1230,1320,1321,1325,1330],{},[1248,1322,1323],{},[608,1324,836],{},[1248,1326,1327],{},[608,1328,1329],{},"List\u003CIWorkingHours>",[1248,1331,1332],{},"Time windows during which the resource can operate",[699,1334,1336],{"id":1335},"unique-id","Unique ID",[601,1338,1339],{},"Each resource needs a unique string identifier. This ID appears in result routes, event streams, and violation reports. No two resources may share the same ID.",[699,1341,1343],{"id":1342},"home-location","Home location",[601,1345,1346],{},"The latitude and longitude define where the resource starts and (by default) returns to at the end of each shift. This is the base position for calculating travel times to the first node and from the last node. In open-route scenarios or with overnight stays, the end-of-day position may differ from the home location.",[596,1348,641],{"id":1349},"working-hours",[601,1351,1352,1353,1355],{},"Working hours define when the resource is available to work. Each ",[608,1354,813],{}," entry represents one shift or one day. A resource with multiple working hours entries can operate across multiple days or shifts.",[704,1357,1359],{"className":706,"code":1358,"language":708,"meta":709,"style":709},"IWorkingHours day1 = new WorkingHours(\n    ZonedDateTime.of(2020, MAY.getValue(), 6, 8, 0, 0, 0, ZoneId.of(\"Europe\u002FBerlin\")),\n    ZonedDateTime.of(2020, MAY.getValue(), 6, 17, 0, 0, 0, ZoneId.of(\"Europe\u002FBerlin\")));\n\nIWorkingHours day2 = new WorkingHours(\n    ZonedDateTime.of(2020, MAY.getValue(), 7, 8, 0, 0, 0, ZoneId.of(\"Europe\u002FBerlin\")),\n    ZonedDateTime.of(2020, MAY.getValue(), 7, 17, 0, 0, 0, ZoneId.of(\"Europe\u002FBerlin\")));\n",[608,1360,1361,1376,1434,1493,1497,1512,1570],{"__ignoreMap":709},[713,1362,1363,1365,1368,1370,1372,1374],{"class":715,"line":716},[713,1364,813],{"class":719},[713,1366,1367],{"class":723}," day1 ",[713,1369,728],{"class":727},[713,1371,824],{"class":823},[713,1373,849],{"class":737},[713,1375,852],{"class":727},[713,1377,1378,1380,1382,1384,1386,1388,1390,1392,1394,1396,1398,1400,1402,1404,1406,1408,1410,1412,1414,1416,1418,1420,1422,1424,1426,1428,1430,1432],{"class":715,"line":751},[713,1379,858],{"class":723},[713,1381,734],{"class":727},[713,1383,863],{"class":737},[713,1385,741],{"class":727},[713,1387,868],{"class":744},[713,1389,784],{"class":727},[713,1391,873],{"class":723},[713,1393,734],{"class":727},[713,1395,878],{"class":737},[713,1397,881],{"class":727},[713,1399,884],{"class":744},[713,1401,784],{"class":727},[713,1403,889],{"class":744},[713,1405,784],{"class":727},[713,1407,894],{"class":744},[713,1409,784],{"class":727},[713,1411,894],{"class":744},[713,1413,784],{"class":727},[713,1415,894],{"class":744},[713,1417,784],{"class":727},[713,1419,907],{"class":723},[713,1421,734],{"class":727},[713,1423,863],{"class":737},[713,1425,741],{"class":727},[713,1427,916],{"class":727},[713,1429,920],{"class":919},[713,1431,916],{"class":727},[713,1433,925],{"class":727},[713,1435,1436,1438,1440,1442,1444,1446,1448,1450,1452,1454,1456,1458,1460,1462,1464,1466,1468,1470,1472,1474,1476,1478,1480,1482,1484,1486,1488,1490],{"class":715,"line":798},[713,1437,858],{"class":723},[713,1439,734],{"class":727},[713,1441,863],{"class":737},[713,1443,741],{"class":727},[713,1445,868],{"class":744},[713,1447,784],{"class":727},[713,1449,873],{"class":723},[713,1451,734],{"class":727},[713,1453,878],{"class":737},[713,1455,881],{"class":727},[713,1457,884],{"class":744},[713,1459,784],{"class":727},[713,1461,955],{"class":744},[713,1463,784],{"class":727},[713,1465,894],{"class":744},[713,1467,784],{"class":727},[713,1469,894],{"class":744},[713,1471,784],{"class":727},[713,1473,894],{"class":744},[713,1475,784],{"class":727},[713,1477,907],{"class":723},[713,1479,734],{"class":727},[713,1481,863],{"class":737},[713,1483,741],{"class":727},[713,1485,916],{"class":727},[713,1487,920],{"class":919},[713,1489,916],{"class":727},[713,1491,1492],{"class":727},")));\n",[713,1494,1495],{"class":715,"line":805},[713,1496,802],{"emptyLinePlaceholder":801},[713,1498,1499,1501,1504,1506,1508,1510],{"class":715,"line":833},[713,1500,813],{"class":719},[713,1502,1503],{"class":723}," day2 ",[713,1505,728],{"class":727},[713,1507,824],{"class":823},[713,1509,849],{"class":737},[713,1511,852],{"class":727},[713,1513,1514,1516,1518,1520,1522,1524,1526,1528,1530,1532,1534,1536,1538,1540,1542,1544,1546,1548,1550,1552,1554,1556,1558,1560,1562,1564,1566,1568],{"class":715,"line":855},[713,1515,858],{"class":723},[713,1517,734],{"class":727},[713,1519,863],{"class":737},[713,1521,741],{"class":727},[713,1523,868],{"class":744},[713,1525,784],{"class":727},[713,1527,873],{"class":723},[713,1529,734],{"class":727},[713,1531,878],{"class":737},[713,1533,881],{"class":727},[713,1535,1029],{"class":744},[713,1537,784],{"class":727},[713,1539,889],{"class":744},[713,1541,784],{"class":727},[713,1543,894],{"class":744},[713,1545,784],{"class":727},[713,1547,894],{"class":744},[713,1549,784],{"class":727},[713,1551,894],{"class":744},[713,1553,784],{"class":727},[713,1555,907],{"class":723},[713,1557,734],{"class":727},[713,1559,863],{"class":737},[713,1561,741],{"class":727},[713,1563,916],{"class":727},[713,1565,920],{"class":919},[713,1567,916],{"class":727},[713,1569,925],{"class":727},[713,1571,1572,1574,1576,1578,1580,1582,1584,1586,1588,1590,1592,1594,1596,1598,1600,1602,1604,1606,1608,1610,1612,1614,1616,1618,1620,1622,1624,1626],{"class":715,"line":928},[713,1573,858],{"class":723},[713,1575,734],{"class":727},[713,1577,863],{"class":737},[713,1579,741],{"class":727},[713,1581,868],{"class":744},[713,1583,784],{"class":727},[713,1585,873],{"class":723},[713,1587,734],{"class":727},[713,1589,878],{"class":737},[713,1591,881],{"class":727},[713,1593,1029],{"class":744},[713,1595,784],{"class":727},[713,1597,955],{"class":744},[713,1599,784],{"class":727},[713,1601,894],{"class":744},[713,1603,784],{"class":727},[713,1605,894],{"class":744},[713,1607,784],{"class":727},[713,1609,894],{"class":744},[713,1611,784],{"class":727},[713,1613,907],{"class":723},[713,1615,734],{"class":727},[713,1617,863],{"class":737},[713,1619,741],{"class":727},[713,1621,916],{"class":727},[713,1623,920],{"class":919},[713,1625,916],{"class":727},[713,1627,1492],{"class":727},[601,1629,1630,1631,1634],{},"Alternatively, construct from a ",[608,1632,1633],{},"TimeWindow",":",[704,1636,1638],{"className":706,"code":1637,"language":708,"meta":709,"style":709},"TimeWindow tw = new TimeWindow(start, end);\nIWorkingHours hours = new WorkingHours(tw);\n",[608,1639,1640,1666],{"__ignoreMap":709},[713,1641,1642,1644,1647,1649,1651,1654,1656,1659,1661,1664],{"class":715,"line":716},[713,1643,1633],{"class":719},[713,1645,1646],{"class":723}," tw ",[713,1648,728],{"class":727},[713,1650,824],{"class":823},[713,1652,1653],{"class":737}," TimeWindow",[713,1655,741],{"class":727},[713,1657,1658],{"class":723},"start",[713,1660,784],{"class":727},[713,1662,1663],{"class":723}," end",[713,1665,748],{"class":727},[713,1667,1668,1670,1673,1675,1677,1679,1681,1684],{"class":715,"line":751},[713,1669,813],{"class":719},[713,1671,1672],{"class":723}," hours ",[713,1674,728],{"class":727},[713,1676,824],{"class":823},[713,1678,849],{"class":737},[713,1680,741],{"class":727},[713,1682,1683],{"class":723},"tw",[713,1685,748],{"class":727},[601,1687,1688],{},"Working hours are the primary carrier of many resource-level constraints and configurations:",[620,1690,1691,1703,1717],{},[623,1692,1693,1697,1698,734],{},[1694,1695,1696],"strong",{},"ZoneCode constraints"," are attached to individual WorkingHours, enabling per-shift territory definitions. See the ",[626,1699,1702],{"href":1700,"target":1701},"https:\u002F\u002Fwww.dna-evolutions.com\u002Fdocs\u002Flearn-and-explore\u002Ffeature-guides\u002Fzonecodes","_blank","ZoneCodes feature guide",[623,1704,1705,1708,1709,1712,1713,734],{},[1694,1706,1707],{},"Overnight stay availability"," is set per WorkingHours via ",[608,1710,1711],{},"setIsAvailableForStay(true)",". See the ",[626,1714,1716],{"href":1715,"target":1701},"https:\u002F\u002Fwww.dna-evolutions.com\u002Fdocs\u002Flearn-and-explore\u002Ffeature-guides\u002Fovernight_stay","Overnight Stay feature guide",[623,1718,1719,1722],{},[1694,1720,1721],{},"Resource type conditions"," and other per-shift constraints are attached at the WorkingHours level.",[601,1724,1725],{},"This per-shift architecture is a deliberate design decision. It allows the same resource to have different territories, different capabilities, and different policies on different days, all through data configuration without model changes.",[601,1727,1728],{},"Each WorkingHours entry produces exactly one route in the result. A resource with 5 working hours produces 5 routes (one per day\u002Fshift).",[596,1730,647],{"id":1731},"maximum-working-time",[601,1733,1734],{},"The maximum working time defines how long a resource should work within each shift. This is a soft constraint: the optimizer aims to keep total productive and travel time within this limit, but overtime can occur if the schedule demands it.",[704,1736,1738],{"className":706,"code":1737,"language":708,"meta":709,"style":709},"Duration maxWorkingTime = Duration.ofHours(9);\n",[608,1739,1740],{"__ignoreMap":709},[713,1741,1742,1744,1746,1748,1750,1752,1754,1756,1758],{"class":715,"line":716},[713,1743,720],{"class":719},[713,1745,724],{"class":723},[713,1747,728],{"class":727},[713,1749,731],{"class":723},[713,1751,734],{"class":727},[713,1753,738],{"class":737},[713,1755,741],{"class":727},[713,1757,745],{"class":744},[713,1759,748],{"class":727},[601,1761,1762,1763,1766],{},"If overtime occurs, it is reported as a violation and penalized through the cost function. Use ",[608,1764,1765],{},"JOptWeight.WorkingTime"," to control how strongly overtime is penalized.",[601,1768,1769],{},"Maximum working time is per shift. A resource with a 9-hour max and two working hours entries has a 9-hour limit on each day independently.",[596,1771,653],{"id":1772},"maximum-distance",[601,1774,1775],{},"The maximum travel distance defines how far a resource should travel per shift. Like working time, this is a soft constraint: the optimizer targets this limit but may exceed it if necessary.",[704,1777,1779],{"className":706,"code":1778,"language":708,"meta":709,"style":709},"Quantity\u003CLength> maxDistance = Quantities.getQuantity(1200.0, KILO(METRE));\n",[608,1780,1781],{"__ignoreMap":709},[713,1782,1783,1785,1787,1789,1791,1793,1795,1797,1799,1801,1803,1805,1807,1809,1811,1813],{"class":715,"line":716},[713,1784,754],{"class":719},[713,1786,757],{"class":727},[713,1788,760],{"class":719},[713,1790,763],{"class":727},[713,1792,766],{"class":723},[713,1794,728],{"class":727},[713,1796,771],{"class":723},[713,1798,734],{"class":727},[713,1800,776],{"class":737},[713,1802,741],{"class":727},[713,1804,781],{"class":744},[713,1806,784],{"class":727},[713,1808,787],{"class":737},[713,1810,741],{"class":727},[713,1812,792],{"class":723},[713,1814,795],{"class":727},[601,1816,1817,1818,1821],{},"Distance violations are penalized through the cost function. Use ",[608,1819,1820],{},"JOptWeight.MaxRouteDistance"," to control the penalty weight.",[601,1823,1824],{},"In practice, set maxDistance generously for the initial setup and tighten it based on observed results. An overly restrictive maxDistance can prevent the optimizer from assigning distant nodes at all.",[596,1826,659],{"id":1827},"cost-model",[601,1829,1830],{},"The resource cost model defines the per-unit costs for three components:",[704,1832,1834],{"className":706,"code":1833,"language":708,"meta":709,"style":709},"resource.setCost(\n    0,    \u002F\u002F fixed cost per route (e.g. vehicle dispatch cost)\n    1,    \u002F\u002F cost per unit of distance\n    1     \u002F\u002F cost per unit of time\n);\n",[608,1835,1836,1848,1858,1868,1875],{"__ignoreMap":709},[713,1837,1838,1841,1843,1846],{"class":715,"line":716},[713,1839,1840],{"class":723},"resource",[713,1842,734],{"class":727},[713,1844,1845],{"class":737},"setCost",[713,1847,852],{"class":727},[713,1849,1850,1853,1855],{"class":715,"line":751},[713,1851,1852],{"class":744},"    0",[713,1854,784],{"class":727},[713,1856,1857],{"class":1160},"    \u002F\u002F fixed cost per route (e.g. vehicle dispatch cost)\n",[713,1859,1860,1863,1865],{"class":715,"line":798},[713,1861,1862],{"class":744},"    1",[713,1864,784],{"class":727},[713,1866,1867],{"class":1160},"    \u002F\u002F cost per unit of distance\n",[713,1869,1870,1872],{"class":715,"line":805},[713,1871,1862],{"class":744},[713,1873,1874],{"class":1160},"     \u002F\u002F cost per unit of time\n",[713,1876,1877],{"class":715,"line":833},[713,1878,748],{"class":727},[1224,1880,1881,1889],{},[1227,1882,1883],{},[1230,1884,1885,1887],{},[1233,1886,1235],{},[1233,1888,1241],{},[1243,1890,1891,1899,1907],{},[1230,1892,1893,1896],{},[1248,1894,1895],{},"Fixed cost",[1248,1897,1898],{},"A constant cost incurred whenever the resource is used. Set to 0 if there is no dispatch cost.",[1230,1900,1901,1904],{},[1248,1902,1903],{},"Distance cost",[1248,1905,1906],{},"Cost per unit of distance traveled. Higher values make the optimizer prefer shorter routes.",[1230,1908,1909,1912],{},[1248,1910,1911],{},"Time cost",[1248,1913,1914],{},"Cost per unit of time spent. Higher values make the optimizer prefer faster routes.",[601,1916,1917],{},"The cost model interacts with the optimizer's objective function. Adjusting the ratio between distance cost and time cost shifts the optimizer's preference: a high distance cost produces geographically compact routes, while a high time cost produces time-efficient routes.",[704,1919,1921],{"className":706,"code":1920,"language":708,"meta":709,"style":709},"\u002F\u002F Prefer short distances over short times\nresource.setCost(0, 2, 1);\n\n\u002F\u002F Prefer short times over short distances\nresource.setCost(0, 1, 2);\n",[608,1922,1923,1928,1953,1957,1962],{"__ignoreMap":709},[713,1924,1925],{"class":715,"line":716},[713,1926,1927],{"class":1160},"\u002F\u002F Prefer short distances over short times\n",[713,1929,1930,1932,1934,1936,1938,1941,1943,1946,1948,1951],{"class":715,"line":751},[713,1931,1840],{"class":723},[713,1933,734],{"class":727},[713,1935,1845],{"class":737},[713,1937,741],{"class":727},[713,1939,1940],{"class":744},"0",[713,1942,784],{"class":727},[713,1944,1945],{"class":744}," 2",[713,1947,784],{"class":727},[713,1949,1950],{"class":744}," 1",[713,1952,748],{"class":727},[713,1954,1955],{"class":715,"line":798},[713,1956,802],{"emptyLinePlaceholder":801},[713,1958,1959],{"class":715,"line":805},[713,1960,1961],{"class":1160},"\u002F\u002F Prefer short times over short distances\n",[713,1963,1964,1966,1968,1970,1972,1974,1976,1978,1980,1982],{"class":715,"line":833},[713,1965,1840],{"class":723},[713,1967,734],{"class":727},[713,1969,1845],{"class":737},[713,1971,741],{"class":727},[713,1973,1940],{"class":744},[713,1975,784],{"class":727},[713,1977,1950],{"class":744},[713,1979,784],{"class":727},[713,1981,1945],{"class":744},[713,1983,748],{"class":727},[596,1985,665],{"id":1986},"additional-capabilities",[601,1988,1989],{},"After construction, resources can be configured with additional features:",[699,1991,1993],{"id":1992},"flextime-flexible-shift-start","FlexTime (flexible shift start)",[704,1995,1997],{"className":706,"code":1996,"language":708,"meta":709,"style":709},"\u002F\u002F Allow starting up to 2 hours later (reduce idle time)\nresource.setFlexTime(Duration.ofHours(2));\n\n\u002F\u002F Allow starting up to 1 hour earlier (driving only)\nresource.setMaxRouteStartReductionTime(Duration.ofHours(1), true);\nresource.setReductionTimeIsIncludedInWorkingTime(true);\n",[608,1998,1999,2004,2028,2032,2037,2065],{"__ignoreMap":709},[713,2000,2001],{"class":715,"line":716},[713,2002,2003],{"class":1160},"\u002F\u002F Allow starting up to 2 hours later (reduce idle time)\n",[713,2005,2006,2008,2010,2013,2015,2017,2019,2021,2023,2026],{"class":715,"line":751},[713,2007,1840],{"class":723},[713,2009,734],{"class":727},[713,2011,2012],{"class":737},"setFlexTime",[713,2014,741],{"class":727},[713,2016,720],{"class":723},[713,2018,734],{"class":727},[713,2020,738],{"class":737},[713,2022,741],{"class":727},[713,2024,2025],{"class":744},"2",[713,2027,795],{"class":727},[713,2029,2030],{"class":715,"line":798},[713,2031,802],{"emptyLinePlaceholder":801},[713,2033,2034],{"class":715,"line":805},[713,2035,2036],{"class":1160},"\u002F\u002F Allow starting up to 1 hour earlier (driving only)\n",[713,2038,2039,2041,2043,2046,2048,2050,2052,2054,2056,2059,2062],{"class":715,"line":833},[713,2040,1840],{"class":723},[713,2042,734],{"class":727},[713,2044,2045],{"class":737},"setMaxRouteStartReductionTime",[713,2047,741],{"class":727},[713,2049,720],{"class":723},[713,2051,734],{"class":727},[713,2053,738],{"class":737},[713,2055,741],{"class":727},[713,2057,2058],{"class":744},"1",[713,2060,2061],{"class":727},"),",[713,2063,2064],{"class":727}," true);\n",[713,2066,2067,2069,2071,2074],{"class":715,"line":855},[713,2068,1840],{"class":723},[713,2070,734],{"class":727},[713,2072,2073],{"class":737},"setReductionTimeIsIncludedInWorkingTime",[713,2075,2076],{"class":727},"(true);\n",[601,2078,2079,2080,734],{},"See the ",[626,2081,2083],{"href":2082,"target":1701},"https:\u002F\u002Fwww.dna-evolutions.com\u002Fdocs\u002Flearn-and-explore\u002Ffeature-guides\u002Fflextime","FlexTime feature guide",[699,2085,2087],{"id":2086},"overnight-stay-policies","Overnight stay policies",[704,2089,2091],{"className":706,"code":2090,"language":708,"meta":709,"style":709},"\u002F\u002F Stay-out policy: minimum distance or time from home\nresource.setStayOutPolicy(\n    Quantities.getQuantity(100, KILO(METRE)),\n    Duration.ofHours(2));\nresource.setStayOutPolicyReturnDistanceActive(true);\n\n\u002F\u002F Consecutive-night limits\nresource.setStaysOut(-1, 4, 2); \u002F\u002F unlimited total, max 3 in a row, 2 nights recovery\n",[608,2092,2093,2098,2109,2133,2148,2159,2163,2168],{"__ignoreMap":709},[713,2094,2095],{"class":715,"line":716},[713,2096,2097],{"class":1160},"\u002F\u002F Stay-out policy: minimum distance or time from home\n",[713,2099,2100,2102,2104,2107],{"class":715,"line":751},[713,2101,1840],{"class":723},[713,2103,734],{"class":727},[713,2105,2106],{"class":737},"setStayOutPolicy",[713,2108,852],{"class":727},[713,2110,2111,2114,2116,2118,2120,2123,2125,2127,2129,2131],{"class":715,"line":798},[713,2112,2113],{"class":723},"    Quantities",[713,2115,734],{"class":727},[713,2117,776],{"class":737},[713,2119,741],{"class":727},[713,2121,2122],{"class":744},"100",[713,2124,784],{"class":727},[713,2126,787],{"class":737},[713,2128,741],{"class":727},[713,2130,792],{"class":723},[713,2132,925],{"class":727},[713,2134,2135,2138,2140,2142,2144,2146],{"class":715,"line":805},[713,2136,2137],{"class":723},"    Duration",[713,2139,734],{"class":727},[713,2141,738],{"class":737},[713,2143,741],{"class":727},[713,2145,2025],{"class":744},[713,2147,795],{"class":727},[713,2149,2150,2152,2154,2157],{"class":715,"line":833},[713,2151,1840],{"class":723},[713,2153,734],{"class":727},[713,2155,2156],{"class":737},"setStayOutPolicyReturnDistanceActive",[713,2158,2076],{"class":727},[713,2160,2161],{"class":715,"line":855},[713,2162,802],{"emptyLinePlaceholder":801},[713,2164,2165],{"class":715,"line":928},[713,2166,2167],{"class":1160},"\u002F\u002F Consecutive-night limits\n",[713,2169,2170,2172,2174,2177,2180,2182,2184,2187,2189,2191,2194],{"class":715,"line":989},[713,2171,1840],{"class":723},[713,2173,734],{"class":727},[713,2175,2176],{"class":737},"setStaysOut",[713,2178,2179],{"class":727},"(-",[713,2181,2058],{"class":744},[713,2183,784],{"class":727},[713,2185,2186],{"class":744}," 4",[713,2188,784],{"class":727},[713,2190,1945],{"class":744},[713,2192,2193],{"class":727},");",[713,2195,2196],{"class":1160}," \u002F\u002F unlimited total, max 3 in a row, 2 nights recovery\n",[601,2198,2079,2199,734],{},[626,2200,1716],{"href":1715,"target":1701},[699,2202,2204],{"id":2203},"visit-duration-efficiency","Visit duration efficiency",[704,2206,2208],{"className":706,"code":2207,"language":708,"meta":709,"style":709},"\u002F\u002F This resource is 50% faster than default (senior technician)\nresource.setVisitDurationEfficiency(0.5);\n",[608,2209,2210,2215],{"__ignoreMap":709},[713,2211,2212],{"class":715,"line":716},[713,2213,2214],{"class":1160},"\u002F\u002F This resource is 50% faster than default (senior technician)\n",[713,2216,2217,2219,2221,2224,2226,2229],{"class":715,"line":751},[713,2218,1840],{"class":723},[713,2220,734],{"class":727},[713,2222,2223],{"class":737},"setVisitDurationEfficiency",[713,2225,741],{"class":727},[713,2227,2228],{"class":744},"0.5",[713,2230,748],{"class":727},[601,2232,2233],{},"A resource with efficiency 0.5 completes a 30-minute task in 15 minutes (at nodes where route-dependent visit duration is enabled). This models skill differences between resources.",[699,2235,2237],{"id":2236},"resource-depot-pickup-and-delivery","Resource depot (pickup and delivery)",[704,2239,2241],{"className":706,"code":2240,"language":708,"meta":709,"style":709},"IResourceDepot depot = new SimpleResourceDepot(\"TruckDepot\");\nILoadCapacity capacity = new SimpleLoadCapacity(\"Bread\", 20, 0);\ndepot.add(capacity);\nresource.setResourceDepot(depot);\n",[608,2242,2243,2269,2304,2320],{"__ignoreMap":709},[713,2244,2245,2248,2251,2253,2255,2258,2260,2262,2265,2267],{"class":715,"line":716},[713,2246,2247],{"class":719},"IResourceDepot",[713,2249,2250],{"class":723}," depot ",[713,2252,728],{"class":727},[713,2254,824],{"class":823},[713,2256,2257],{"class":737}," SimpleResourceDepot",[713,2259,741],{"class":727},[713,2261,916],{"class":727},[713,2263,2264],{"class":919},"TruckDepot",[713,2266,916],{"class":727},[713,2268,748],{"class":727},[713,2270,2271,2274,2277,2279,2281,2284,2286,2288,2291,2293,2295,2298,2300,2302],{"class":715,"line":751},[713,2272,2273],{"class":719},"ILoadCapacity",[713,2275,2276],{"class":723}," capacity ",[713,2278,728],{"class":727},[713,2280,824],{"class":823},[713,2282,2283],{"class":737}," SimpleLoadCapacity",[713,2285,741],{"class":727},[713,2287,916],{"class":727},[713,2289,2290],{"class":919},"Bread",[713,2292,916],{"class":727},[713,2294,784],{"class":727},[713,2296,2297],{"class":744}," 20",[713,2299,784],{"class":727},[713,2301,894],{"class":744},[713,2303,748],{"class":727},[713,2305,2306,2309,2311,2313,2315,2318],{"class":715,"line":798},[713,2307,2308],{"class":723},"depot",[713,2310,734],{"class":727},[713,2312,841],{"class":737},[713,2314,741],{"class":727},[713,2316,2317],{"class":723},"capacity",[713,2319,748],{"class":727},[713,2321,2322,2324,2326,2329,2331,2333],{"class":715,"line":805},[713,2323,1840],{"class":723},[713,2325,734],{"class":727},[713,2327,2328],{"class":737},"setResourceDepot",[713,2330,741],{"class":727},[713,2332,2308],{"class":723},[713,2334,748],{"class":727},[601,2336,2337,2338,734],{},"This attaches a cargo capacity to the resource for pickup and delivery scenarios. See the ",[626,2339,2341],{"href":2340,"target":1701},"https:\u002F\u002Fwww.dna-evolutions.com\u002Fdocs\u002Flearn-and-explore\u002Ffeature-guides\u002Fpickup_and_delivery","Pickup & Delivery feature guide",[699,2343,2345],{"id":2344},"qualifications-and-constraints","Qualifications and constraints",[601,2347,2348],{},"Resources can carry qualifications (skills, types) and constraints (zones, binding\u002Fexcluding resource conditions) that control which nodes they can visit:",[704,2350,2352],{"className":706,"code":2351,"language":708,"meta":709,"style":709},"\u002F\u002F ZoneCode constraint on a specific WorkingHours\nZoneNumberConstraint zoneConstraint = new ZoneNumberConstraint();\nzoneConstraint.setIsHard(true);\nzoneConstraint.addZoneCode(new ZoneNumber(1));\nworkingHoursDay1.addConstraint(zoneConstraint);\n",[608,2353,2354,2359,2377,2389,2411],{"__ignoreMap":709},[713,2355,2356],{"class":715,"line":716},[713,2357,2358],{"class":1160},"\u002F\u002F ZoneCode constraint on a specific WorkingHours\n",[713,2360,2361,2364,2367,2369,2371,2374],{"class":715,"line":751},[713,2362,2363],{"class":719},"ZoneNumberConstraint",[713,2365,2366],{"class":723}," zoneConstraint ",[713,2368,728],{"class":727},[713,2370,824],{"class":823},[713,2372,2373],{"class":737}," ZoneNumberConstraint",[713,2375,2376],{"class":727},"();\n",[713,2378,2379,2382,2384,2387],{"class":715,"line":798},[713,2380,2381],{"class":723},"zoneConstraint",[713,2383,734],{"class":727},[713,2385,2386],{"class":737},"setIsHard",[713,2388,2076],{"class":727},[713,2390,2391,2393,2395,2398,2400,2402,2405,2407,2409],{"class":715,"line":805},[713,2392,2381],{"class":723},[713,2394,734],{"class":727},[713,2396,2397],{"class":737},"addZoneCode",[713,2399,741],{"class":727},[713,2401,846],{"class":823},[713,2403,2404],{"class":737}," ZoneNumber",[713,2406,741],{"class":727},[713,2408,2058],{"class":744},[713,2410,795],{"class":727},[713,2412,2413,2416,2418,2421,2423,2425],{"class":715,"line":833},[713,2414,2415],{"class":723},"workingHoursDay1",[713,2417,734],{"class":727},[713,2419,2420],{"class":737},"addConstraint",[713,2422,741],{"class":727},[713,2424,2381],{"class":723},[713,2426,748],{"class":727},[596,2428,671],{"id":2429},"builder-pattern",[601,2431,2432],{},"For enterprise integrations, resources can be constructed using the immutable builder pattern:",[704,2434,2436],{"className":706,"code":2435,"language":708,"meta":709,"style":709},"Resource resource = Resource.builder()\n    .id(\"Jack from Aachen\")\n    .type(CapacityResource.of())\n    .position(Position.of(50.775346, 6.083887))\n    .maxTime(Duration.ofHours(9))\n    .maxDistance(Quantities.getQuantity(1200, KILO(METRE)))\n    .addWorkingHours(\n        WorkingHours.builder()\n            .begin(begin.toInstant())\n            .end(end.toInstant())\n            .zoneId(begin.getZone())\n            .build())\n    .build();\n",[608,2437,2438,2459,2478,2496,2525,2546,2577,2586,2597,2616,2633,2651,2660],{"__ignoreMap":709},[713,2439,2440,2443,2446,2448,2451,2453,2456],{"class":715,"line":716},[713,2441,2442],{"class":719},"Resource",[713,2444,2445],{"class":723}," resource ",[713,2447,728],{"class":727},[713,2449,2450],{"class":723}," Resource",[713,2452,734],{"class":727},[713,2454,2455],{"class":737},"builder",[713,2457,2458],{"class":727},"()\n",[713,2460,2461,2464,2466,2468,2470,2473,2475],{"class":715,"line":751},[713,2462,2463],{"class":727},"    .",[713,2465,1252],{"class":737},[713,2467,741],{"class":727},[713,2469,916],{"class":727},[713,2471,2472],{"class":919},"Jack from Aachen",[713,2474,916],{"class":727},[713,2476,2477],{"class":727},")\n",[713,2479,2480,2482,2485,2487,2489,2491,2493],{"class":715,"line":798},[713,2481,2463],{"class":727},[713,2483,2484],{"class":737},"type",[713,2486,741],{"class":727},[713,2488,610],{"class":723},[713,2490,734],{"class":727},[713,2492,863],{"class":737},[713,2494,2495],{"class":727},"())\n",[713,2497,2498,2500,2503,2505,2508,2510,2512,2514,2517,2519,2522],{"class":715,"line":805},[713,2499,2463],{"class":727},[713,2501,2502],{"class":737},"position",[713,2504,741],{"class":727},[713,2506,2507],{"class":723},"Position",[713,2509,734],{"class":727},[713,2511,863],{"class":737},[713,2513,741],{"class":727},[713,2515,2516],{"class":744},"50.775346",[713,2518,784],{"class":727},[713,2520,2521],{"class":744}," 6.083887",[713,2523,2524],{"class":727},"))\n",[713,2526,2527,2529,2532,2534,2536,2538,2540,2542,2544],{"class":715,"line":833},[713,2528,2463],{"class":727},[713,2530,2531],{"class":737},"maxTime",[713,2533,741],{"class":727},[713,2535,720],{"class":723},[713,2537,734],{"class":727},[713,2539,738],{"class":737},[713,2541,741],{"class":727},[713,2543,745],{"class":744},[713,2545,2524],{"class":727},[713,2547,2548,2550,2552,2554,2557,2559,2561,2563,2566,2568,2570,2572,2574],{"class":715,"line":855},[713,2549,2463],{"class":727},[713,2551,1310],{"class":737},[713,2553,741],{"class":727},[713,2555,2556],{"class":723},"Quantities",[713,2558,734],{"class":727},[713,2560,776],{"class":737},[713,2562,741],{"class":727},[713,2564,2565],{"class":744},"1200",[713,2567,784],{"class":727},[713,2569,787],{"class":737},[713,2571,741],{"class":727},[713,2573,792],{"class":723},[713,2575,2576],{"class":727},")))\n",[713,2578,2579,2581,2584],{"class":715,"line":928},[713,2580,2463],{"class":727},[713,2582,2583],{"class":737},"addWorkingHours",[713,2585,852],{"class":727},[713,2587,2588,2591,2593,2595],{"class":715,"line":989},[713,2589,2590],{"class":723},"        WorkingHours",[713,2592,734],{"class":727},[713,2594,2455],{"class":737},[713,2596,2458],{"class":727},[713,2598,2599,2602,2605,2607,2609,2611,2614],{"class":715,"line":1006},[713,2600,2601],{"class":727},"            .",[713,2603,2604],{"class":737},"begin",[713,2606,741],{"class":727},[713,2608,2604],{"class":723},[713,2610,734],{"class":727},[713,2612,2613],{"class":737},"toInstant",[713,2615,2495],{"class":727},[713,2617,2618,2620,2623,2625,2627,2629,2631],{"class":715,"line":1066},[713,2619,2601],{"class":727},[713,2621,2622],{"class":737},"end",[713,2624,741],{"class":727},[713,2626,2622],{"class":723},[713,2628,734],{"class":727},[713,2630,2613],{"class":737},[713,2632,2495],{"class":727},[713,2634,2635,2637,2640,2642,2644,2646,2649],{"class":715,"line":1125},[713,2636,2601],{"class":727},[713,2638,2639],{"class":737},"zoneId",[713,2641,741],{"class":727},[713,2643,2604],{"class":723},[713,2645,734],{"class":727},[713,2647,2648],{"class":737},"getZone",[713,2650,2495],{"class":727},[713,2652,2653,2655,2658],{"class":715,"line":1130},[713,2654,2601],{"class":727},[713,2656,2657],{"class":737},"build",[713,2659,2495],{"class":727},[713,2661,2662,2664,2666],{"class":715,"line":1147},[713,2663,2463],{"class":727},[713,2665,2657],{"class":737},[713,2667,2376],{"class":727},[601,2669,2670,2671,2674],{},"The builder produces an immutable object that can be serialized to JSON and used across REST, SDK, and test environments. The ",[608,2672,2673],{},"OptimizationConfig"," builder composes resources alongside nodes and properties into a single reproducible configuration.",[2676,2677,2678],"note",{},[601,2679,2680,2681,734],{},"Example on GitHub: ",[626,2682,2684],{"href":2683,"target":1701},"https:\u002F\u002Fgithub.com\u002FDNA-Evolutions\u002FJava-TourOptimizer-Examples\u002Fblob\u002Fmaster\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fdna\u002Fjopt\u002Ftouroptimizer\u002Fjava\u002Fexamples\u002Fadvanced\u002Fbuilderpattern\u002FBuilderPatternExample.java","BuilderPatternExample.java",[596,2686,677],{"id":2687},"adding-resources-to-the-optimization",[601,2689,2690],{},"Resources are added to the optimization instance using the same method as nodes:",[704,2692,2694],{"className":706,"code":2693,"language":708,"meta":709,"style":709},"opti.addElement(resource);\n",[608,2695,2696],{"__ignoreMap":709},[713,2697,2698,2701,2703,2706,2708,2710],{"class":715,"line":716},[713,2699,2700],{"class":723},"opti",[713,2702,734],{"class":727},[713,2704,2705],{"class":737},"addElement",[713,2707,741],{"class":727},[713,2709,1840],{"class":723},[713,2711,748],{"class":727},[601,2713,2714],{},"Resource IDs must be unique. The optimizer matches resources to nodes based on time window compatibility, geographic proximity, constraints, and cost.",[613,2716],{},[596,2718,683],{"id":2719},"summary",[1224,2721,2722,2736],{},[1227,2723,2724],{},[1230,2725,2726,2729,2731,2734],{},[1233,2727,2728],{},"Property",[1233,2730,1238],{},[1233,2732,2733],{},"Constraint type",[1233,2735,1241],{},[1243,2737,2738,2753,2767,2782,2796,2810,2826,2842,2857],{},[1230,2739,2740,2742,2747,2750],{},[1248,2741,1343],{},[1248,2743,2744],{},[608,2745,2746],{},"double, double",[1248,2748,2749],{},"n\u002Fa",[1248,2751,2752],{},"Start\u002Fend position for each shift",[1230,2754,2755,2757,2761,2764],{},[1248,2756,641],{},[1248,2758,2759],{},[608,2760,1329],{},[1248,2762,2763],{},"Hard (defines available shifts)",[1248,2765,2766],{},"When the resource can operate",[1230,2768,2769,2772,2776,2779],{},[1248,2770,2771],{},"Max working time",[1248,2773,2774],{},[608,2775,720],{},[1248,2777,2778],{},"Soft (penalized via cost)",[1248,2780,2781],{},"Target shift duration",[1230,2783,2784,2787,2791,2793],{},[1248,2785,2786],{},"Max distance",[1248,2788,2789],{},[608,2790,1315],{},[1248,2792,2778],{},[1248,2794,2795],{},"Target travel distance per shift",[1230,2797,2798,2800,2805,2807],{},[1248,2799,659],{},[1248,2801,2802],{},[608,2803,2804],{},"setCost(fixed, dist, time)",[1248,2806,2749],{},[1248,2808,2809],{},"Per-unit costs for the objective function",[1230,2811,2812,2815,2820,2823],{},[1248,2813,2814],{},"FlexTime",[1248,2816,2817],{},[608,2818,2819],{},"setFlexTime(...)",[1248,2821,2822],{},"Hard (bounded)",[1248,2824,2825],{},"Flexible shift start",[1230,2827,2828,2831,2836,2839],{},[1248,2829,2830],{},"Overnight stay",[1248,2832,2833],{},[608,2834,2835],{},"setStayOutPolicy(...)",[1248,2837,2838],{},"Policy-driven",[1248,2840,2841],{},"Multi-day routing control",[1230,2843,2844,2847,2852,2854],{},[1248,2845,2846],{},"Visit efficiency",[1248,2848,2849],{},[608,2850,2851],{},"setVisitDurationEfficiency(...)",[1248,2853,2749],{},[1248,2855,2856],{},"Skill-based task speed",[1230,2858,2859,2862,2867,2869],{},[1248,2860,2861],{},"Resource depot",[1248,2863,2864],{},[608,2865,2866],{},"setResourceDepot(...)",[1248,2868,2749],{},[1248,2870,2871],{},"Cargo capacity for PND",[601,2873,2874,2875,2878],{},"Per-shift configurations (zones, overnight availability, constraints) are attached to individual ",[608,2876,2877],{},"WorkingHours"," entries, not to the resource as a whole. This enables daily territory switching, per-shift capabilities, and granular policy control.",[601,2880,2881,2882,2886],{},"For the next step, see the ",[626,2883,2885],{"href":2884,"target":1701},"https:\u002F\u002Fwww.dna-evolutions.com\u002Fdocs\u002Fgetting-started\u002Ftutorials\u002Fbasic-elements","Basic Elements tutorial"," to learn how nodes and resources work together in an optimization.",[613,2888],{},[596,2890,2892],{"id":2891},"authors","Authors",[601,2894,2895,2896,2902],{},"A product by ",[626,2897,2901],{"href":2898,"rel":2899},"https:\u002F\u002Fwww.dna-evolutions.com",[2900],"nofollow","dna-evolutions ","©",[2904,2905,2906],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":709,"searchDepth":751,"depth":751,"links":2908},[2909,2910,2911,2914,2918,2919,2920,2921,2922,2929,2930,2931,2932],{"id":598,"depth":751,"text":599},{"id":617,"depth":751,"text":618},{"id":688,"depth":751,"text":629,"children":2912},[2913],{"id":701,"depth":798,"text":702},{"id":1222,"depth":751,"text":635,"children":2915},[2916,2917],{"id":1335,"depth":798,"text":1336},{"id":1342,"depth":798,"text":1343},{"id":1349,"depth":751,"text":641},{"id":1731,"depth":751,"text":647},{"id":1772,"depth":751,"text":653},{"id":1827,"depth":751,"text":659},{"id":1986,"depth":751,"text":665,"children":2923},[2924,2925,2926,2927,2928],{"id":1992,"depth":798,"text":1993},{"id":2086,"depth":798,"text":2087},{"id":2203,"depth":798,"text":2204},{"id":2236,"depth":798,"text":2237},{"id":2344,"depth":798,"text":2345},{"id":2429,"depth":751,"text":671},{"id":2687,"depth":751,"text":677},{"id":2719,"depth":751,"text":683},{"id":2891,"depth":751,"text":2892},null,"md",{},{"icon":72},{"title":69,"description":2933},"Z4J1prlZeks5vaY0RX-lb_MxMt1XCt4zhohUrkAgRwY",[2940,2941],{"title":64,"path":65,"stem":66,"description":2933,"icon":67,"children":-1},{"title":84,"path":85,"stem":86,"description":2933,"icon":87,"children":-1},1775759478879]