[{"data":1,"prerenderedAt":1277},["ShallowReactive",2],{"navigation":3,"portal-navigation":560,"\u002Fdocs\u002Fsystem-integration\u002Fcontainerized-deployment\u002Fjopt-container-macos":586,"\u002Fdocs\u002Fsystem-integration\u002Fcontainerized-deployment\u002Fjopt-container-macos-surround":1272},[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":547,"body":588,"description":1266,"extension":1267,"meta":1268,"navigation":1269,"path":548,"seo":1270,"stem":549,"__hash__":1271},"docs\u002F1.docs\u002F2.system-integration\u002F1.containerized-deployment\u002F3.jopt-container-macos.md",{"type":589,"value":590,"toc":1244},"minimark",[591,596,613,626,629,634,637,661,664,666,670,677,691,694,708,710,714,717,720,743,746,748,752,757,760,804,807,815,817,821,825,828,831,898,900,904,907,963,966,968,972,975,993,996,998,1002,1005,1067,1069,1073,1077,1080,1095,1098,1102,1105,1122,1124,1128,1146,1148,1152,1155,1208,1211,1213,1217,1228,1230,1234,1237,1240],[592,593,595],"h1",{"id":594},"jopt-touroptimizer-on-apple-platforms-macos","JOpt TourOptimizer on Apple Platforms (macOS)",[597,598,599,600,604,605,608,609,612],"p",{},"This document describes how to host ",[601,602,603],"strong",{},"JOpt TourOptimizer"," locally on Apple systems running ",[601,606,607],{},"macOS",".",[610,611],"br",{},"\nIt is intended for developers, system engineers, and integrators who want to run JOpt on Apple hardware (including Apple Silicon) for development, testing, or small on-premise deployments.",[614,615,616],"blockquote",{},[597,617,618,619,622,623,625],{},"Note: Hosting server-side Spring applications directly on ",[601,620,621],{},"iOS"," is not supported due to platform restrictions. This document therefore focuses on ",[601,624,607],{},", which is the appropriate Apple platform for running containerized backend services.",[627,628],"hr",{},[630,631,633],"h2",{"id":632},"system-requirements","System Requirements",[597,635,636],{},"The following prerequisites are required:",[638,639,640,644,647,650],"ul",{},[641,642,643],"li",{},"macOS 12 or newer (Intel or Apple Silicon)",[641,645,646],{},"Docker-compatible container runtime",[641,648,649],{},"Apple Silicon (M1\u002FM2\u002FM3) or Intel x86_64 CPU",[641,651,652,653],{},"Minimum recommended resources:\n",[638,654,655,658],{},[641,656,657],{},"CPU: 2 cores",[641,659,660],{},"Memory: 4 GB RAM",[597,662,663],{},"No additional virtualization configuration is required beyond what the container runtime provides.",[627,665],{},[630,667,669],{"id":668},"deployment-model","Deployment Model",[597,671,672,673,676],{},"On macOS, JOpt TourOptimizer runs as a ",[601,674,675],{},"containerized Spring application",":",[638,678,679,682,685,688],{},[641,680,681],{},"Exposes REST APIs over HTTP",[641,683,684],{},"Uses environment variables or configuration files for configuration",[641,686,687],{},"Writes logs to standard output",[641,689,690],{},"Runs as a single-node deployment",[597,692,693],{},"This model is well suited for:",[638,695,696,699,702,705],{},[641,697,698],{},"Local development",[641,700,701],{},"Integration testing",[641,703,704],{},"Demonstrations",[641,706,707],{},"Small-scale on-premise usage",[627,709],{},[630,711,713],{"id":712},"container-runtime-setup","Container Runtime Setup",[597,715,716],{},"Install a Docker-compatible container runtime for macOS (for example Docker Engine–based or Podman-based solutions).",[597,718,719],{},"After installation, verify that the runtime is available:",[721,722,727],"pre",{"className":723,"code":724,"language":725,"meta":726,"style":726},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","docker version\n","bash","",[728,729,730],"code",{"__ignoreMap":726},[731,732,735,739],"span",{"class":733,"line":734},"line",1,[731,736,738],{"class":737},"sBMFI","docker",[731,740,742],{"class":741},"sfazB"," version\n",[597,744,745],{},"Ensure that the container runtime is running before proceeding.",[627,747],{},[630,749,751],{"id":750},"running-jopt-touroptimizer","Running JOpt TourOptimizer",[753,754,756],"h3",{"id":755},"basic-startup","Basic Startup",[597,758,759],{},"Start JOpt TourOptimizer using the following command:",[721,761,763],{"className":723,"code":762,"language":725,"meta":726,"style":726},"docker run \\\n  --name jopt-touroptimizer \\\n  -p 8080:8080 \\\n  dna-evolutions\u002Fjopt-touroptimizer:latest\n",[728,764,765,776,787,798],{"__ignoreMap":726},[731,766,767,769,772],{"class":733,"line":734},[731,768,738],{"class":737},[731,770,771],{"class":741}," run",[731,773,775],{"class":774},"sTEyZ"," \\\n",[731,777,779,782,785],{"class":733,"line":778},2,[731,780,781],{"class":741},"  --name",[731,783,784],{"class":741}," jopt-touroptimizer",[731,786,775],{"class":774},[731,788,790,793,796],{"class":733,"line":789},3,[731,791,792],{"class":741},"  -p",[731,794,795],{"class":741}," 8080:8080",[731,797,775],{"class":774},[731,799,801],{"class":733,"line":800},4,[731,802,803],{"class":741},"  dna-evolutions\u002Fjopt-touroptimizer:latest\n",[597,805,806],{},"Once started, the application is reachable at:",[721,808,813],{"className":809,"code":811,"language":812},[810],"language-text","http:\u002F\u002Flocalhost:8080\n","text",[728,814,811],{"__ignoreMap":726},[627,816],{},[630,818,820],{"id":819},"configuration","Configuration",[753,822,824],{"id":823},"environment-based-configuration","Environment-Based Configuration",[597,826,827],{},"JOpt follows standard Spring configuration conventions.",[597,829,830],{},"Example:",[721,832,834],{"className":723,"code":833,"language":725,"meta":726,"style":726},"docker run \\\n  --name jopt-touroptimizer \\\n  -p 8080:8080 \\\n  -e SPRING_PROFILES_ACTIVE=macos \\\n  -e JOPT_LICENSE_KEY=\u003Clicense-key> \\\n  dna-evolutions\u002Fjopt-touroptimizer:latest\n",[728,835,836,844,852,860,870,893],{"__ignoreMap":726},[731,837,838,840,842],{"class":733,"line":734},[731,839,738],{"class":737},[731,841,771],{"class":741},[731,843,775],{"class":774},[731,845,846,848,850],{"class":733,"line":778},[731,847,781],{"class":741},[731,849,784],{"class":741},[731,851,775],{"class":774},[731,853,854,856,858],{"class":733,"line":789},[731,855,792],{"class":741},[731,857,795],{"class":741},[731,859,775],{"class":774},[731,861,862,865,868],{"class":733,"line":800},[731,863,864],{"class":741},"  -e",[731,866,867],{"class":741}," SPRING_PROFILES_ACTIVE=macos",[731,869,775],{"class":774},[731,871,873,875,878,882,885,888,891],{"class":733,"line":872},5,[731,874,864],{"class":741},[731,876,877],{"class":741}," JOPT_LICENSE_KEY=",[731,879,881],{"class":880},"sMK4o","\u003C",[731,883,884],{"class":741},"license-ke",[731,886,887],{"class":774},"y",[731,889,890],{"class":880},">",[731,892,775],{"class":774},[731,894,896],{"class":733,"line":895},6,[731,897,803],{"class":741},[627,899],{},[753,901,903],{"id":902},"configuration-via-files","Configuration via Files",[597,905,906],{},"Configuration files can be mounted into the container:",[721,908,910],{"className":723,"code":909,"language":725,"meta":726,"style":726},"docker run \\\n  --name jopt-touroptimizer \\\n  -p 8080:8080 \\\n  -v \u002FUsers\u002F\u003Cuser>\u002Fjopt\u002Fconfig\u002Fapplication.yml:\u002Fapp\u002Fconfig\u002Fapplication.yml:ro \\\n  dna-evolutions\u002Fjopt-touroptimizer:latest\n",[728,911,912,920,928,936,959],{"__ignoreMap":726},[731,913,914,916,918],{"class":733,"line":734},[731,915,738],{"class":737},[731,917,771],{"class":741},[731,919,775],{"class":774},[731,921,922,924,926],{"class":733,"line":778},[731,923,781],{"class":741},[731,925,784],{"class":741},[731,927,775],{"class":774},[731,929,930,932,934],{"class":733,"line":789},[731,931,792],{"class":741},[731,933,795],{"class":741},[731,935,775],{"class":774},[731,937,938,941,944,946,949,952,954,957],{"class":733,"line":800},[731,939,940],{"class":741},"  -v",[731,942,943],{"class":741}," \u002FUsers\u002F",[731,945,881],{"class":880},[731,947,948],{"class":741},"use",[731,950,951],{"class":774},"r",[731,953,890],{"class":880},[731,955,956],{"class":741},"\u002Fjopt\u002Fconfig\u002Fapplication.yml:\u002Fapp\u002Fconfig\u002Fapplication.yml:ro",[731,958,775],{"class":774},[731,960,961],{"class":733,"line":872},[731,962,803],{"class":741},[597,964,965],{},"Spring Boot automatically detects configuration files in standard locations.",[627,967],{},[630,969,971],{"id":970},"apple-silicon-considerations","Apple Silicon Considerations",[597,973,974],{},"On Apple Silicon systems:",[638,976,977,983,986],{},[641,978,979,980],{},"Ensure that the container image supports ",[728,981,982],{},"linux\u002Farm64",[641,984,985],{},"If multi-architecture images are used, the correct architecture is selected automatically",[641,987,988,989,992],{},"Emulated ",[728,990,991],{},"amd64"," images are supported but may result in reduced performance",[597,994,995],{},"For compute-intensive optimization workloads, native ARM64 images are strongly recommended.",[627,997],{},[630,999,1001],{"id":1000},"resource-management","Resource Management",[597,1003,1004],{},"Limit resource usage explicitly to avoid system contention:",[721,1006,1008],{"className":723,"code":1007,"language":725,"meta":726,"style":726},"docker run \\\n  --name jopt-touroptimizer \\\n  -p 8080:8080 \\\n  --cpus=\"2.0\" \\\n  --memory=\"4g\" \\\n  dna-evolutions\u002Fjopt-touroptimizer:latest\n",[728,1009,1010,1018,1026,1034,1049,1063],{"__ignoreMap":726},[731,1011,1012,1014,1016],{"class":733,"line":734},[731,1013,738],{"class":737},[731,1015,771],{"class":741},[731,1017,775],{"class":774},[731,1019,1020,1022,1024],{"class":733,"line":778},[731,1021,781],{"class":741},[731,1023,784],{"class":741},[731,1025,775],{"class":774},[731,1027,1028,1030,1032],{"class":733,"line":789},[731,1029,792],{"class":741},[731,1031,795],{"class":741},[731,1033,775],{"class":774},[731,1035,1036,1039,1042,1045,1047],{"class":733,"line":800},[731,1037,1038],{"class":741},"  --cpus=",[731,1040,1041],{"class":880},"\"",[731,1043,1044],{"class":741},"2.0",[731,1046,1041],{"class":880},[731,1048,775],{"class":774},[731,1050,1051,1054,1056,1059,1061],{"class":733,"line":872},[731,1052,1053],{"class":741},"  --memory=",[731,1055,1041],{"class":880},[731,1057,1058],{"class":741},"4g",[731,1060,1041],{"class":880},[731,1062,775],{"class":774},[731,1064,1065],{"class":733,"line":895},[731,1066,803],{"class":741},[627,1068],{},[630,1070,1072],{"id":1071},"logging-and-health-monitoring","Logging and Health Monitoring",[753,1074,1076],{"id":1075},"logs","Logs",[597,1078,1079],{},"Access application logs using:",[721,1081,1083],{"className":723,"code":1082,"language":725,"meta":726,"style":726},"docker logs jopt-touroptimizer\n",[728,1084,1085],{"__ignoreMap":726},[731,1086,1087,1089,1092],{"class":733,"line":734},[731,1088,738],{"class":737},[731,1090,1091],{"class":741}," logs",[731,1093,1094],{"class":741}," jopt-touroptimizer\n",[597,1096,1097],{},"Logs are written to standard output and integrate naturally with container tooling.",[753,1099,1101],{"id":1100},"health-endpoints","Health Endpoints",[597,1103,1104],{},"If Spring Boot Actuator is enabled, health endpoints can be used for monitoring:",[638,1106,1107,1112,1117],{},[641,1108,1109],{},[728,1110,1111],{},"\u002Factuator\u002Fhealth",[641,1113,1114],{},[728,1115,1116],{},"\u002Factuator\u002Fhealth\u002Fliveness",[641,1118,1119],{},[728,1120,1121],{},"\u002Factuator\u002Fhealth\u002Freadiness",[627,1123],{},[630,1125,1127],{"id":1126},"networking-and-security","Networking and Security",[638,1129,1130,1133,1140,1143],{},[641,1131,1132],{},"Expose the service only on required interfaces",[641,1134,1135,1136,1139],{},"Prefer ",[728,1137,1138],{},"localhost"," bindings for development",[641,1141,1142],{},"Use HTTPS if the service is exposed beyond the local machine",[641,1144,1145],{},"Never embed license keys directly in scripts or shell history",[627,1147],{},[630,1149,1151],{"id":1150},"updates-and-lifecycle-management","Updates and Lifecycle Management",[597,1153,1154],{},"To update JOpt TourOptimizer:",[721,1156,1158],{"className":723,"code":1157,"language":725,"meta":726,"style":726},"docker pull dna-evolutions\u002Fjopt-touroptimizer:\u003Cversion>\ndocker stop jopt-touroptimizer\ndocker rm jopt-touroptimizer\ndocker run ...\n",[728,1159,1160,1181,1190,1199],{"__ignoreMap":726},[731,1161,1162,1164,1167,1170,1172,1175,1178],{"class":733,"line":734},[731,1163,738],{"class":737},[731,1165,1166],{"class":741}," pull",[731,1168,1169],{"class":741}," dna-evolutions\u002Fjopt-touroptimizer:",[731,1171,881],{"class":880},[731,1173,1174],{"class":741},"versio",[731,1176,1177],{"class":774},"n",[731,1179,1180],{"class":880},">\n",[731,1182,1183,1185,1188],{"class":733,"line":778},[731,1184,738],{"class":737},[731,1186,1187],{"class":741}," stop",[731,1189,1094],{"class":741},[731,1191,1192,1194,1197],{"class":733,"line":789},[731,1193,738],{"class":737},[731,1195,1196],{"class":741}," rm",[731,1198,1094],{"class":741},[731,1200,1201,1203,1205],{"class":733,"line":800},[731,1202,738],{"class":737},[731,1204,771],{"class":741},[731,1206,1207],{"class":741}," ...\n",[597,1209,1210],{},"Always validate new versions before replacing existing installations.",[627,1212],{},[630,1214,1216],{"id":1215},"limitations","Limitations",[638,1218,1219,1222,1225],{},[641,1220,1221],{},"macOS deployments are intended for local or small-scale use",[641,1223,1224],{},"High availability and horizontal scaling require Kubernetes",[641,1226,1227],{},"iOS devices are not supported as hosting platforms",[627,1229],{},[630,1231,1233],{"id":1232},"summary","Summary",[597,1235,1236],{},"Running JOpt TourOptimizer on macOS provides a convenient and reliable setup for Apple-based development and on-premise scenarios. The containerized Spring architecture ensures consistent behavior across macOS, Linux, and Kubernetes environments.",[597,1238,1239],{},"For production-grade, scalable deployments, Kubernetes remains the recommended platform.",[1241,1242,1243],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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);}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}",{"title":726,"searchDepth":778,"depth":778,"links":1245},[1246,1247,1248,1249,1252,1256,1257,1258,1262,1263,1264,1265],{"id":632,"depth":778,"text":633},{"id":668,"depth":778,"text":669},{"id":712,"depth":778,"text":713},{"id":750,"depth":778,"text":751,"children":1250},[1251],{"id":755,"depth":789,"text":756},{"id":819,"depth":778,"text":820,"children":1253},[1254,1255],{"id":823,"depth":789,"text":824},{"id":902,"depth":789,"text":903},{"id":970,"depth":778,"text":971},{"id":1000,"depth":778,"text":1001},{"id":1071,"depth":778,"text":1072,"children":1259},[1260,1261],{"id":1075,"depth":789,"text":1076},{"id":1100,"depth":789,"text":1101},{"id":1126,"depth":778,"text":1127},{"id":1150,"depth":778,"text":1151},{"id":1215,"depth":778,"text":1216},{"id":1232,"depth":778,"text":1233},"Local and on-premise hosting of JOpt TourOptimizer on Apple macOS systems","md",{},{"icon":550},{"title":547,"description":1266},"o1tRehPcN1evf4GwU8AFU24zCcQkuYxeoJgYSJHHjVs",[1273,1275],{"title":543,"path":544,"stem":545,"description":1274,"icon":37,"children":-1},"Local and on-premise hosting of JOpt TourOptimizer on Microsoft Windows systems",{"title":552,"path":553,"stem":554,"description":1276,"icon":239,"children":-1},"Deployment and operation of JOpt TourOptimizer in Kubernetes environments",1776184536342]