[{"data":1,"prerenderedAt":1933},["ShallowReactive",2],{"navigation":3,"portal-navigation":560,"\u002Fdocs\u002Flearn-and-explore\u002Ffeature-guides\u002Fcomparison_tool":586,"\u002Fdocs\u002Flearn-and-explore\u002Ffeature-guides\u002Fcomparison_tool-surround":1930},[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":135,"body":588,"description":1924,"extension":1925,"meta":1926,"navigation":1927,"path":136,"seo":1928,"stem":137,"__hash__":1929},"docs\u002F1.docs\u002F1.learn-and-explore\u002F1.feature-guides\u002Fcomparison_tool.md",{"type":589,"value":590,"toc":1905},"minimark",[591,596,613,618,638,644,665,668,673,706,708,711,722,727,745,752,768,775,777,780,792,818,820,823,830,845,849,872,877,886,890,910,915,921,925,1007,1016,1018,1021,1025,1033,1252,1259,1261,1265,1268,1506,1508,1512,1518,1781,1783,1787,1790,1798,1803,1830,1832,1835,1848,1853,1885,1887,1891,1901],[592,593,595],"h1",{"id":594},"optimization-solution-comparison-tool","Optimization Solution Comparison Tool",[597,598,599,600,604,605,608,609,612],"p",{},"In logistics and route optimization, an automatically generated solution may appear ",[601,602,603],"strong",{},"suboptimal"," to human evaluators. While the optimizer considers ",[601,606,607],{},"complex constraints"," (e.g., time windows, skill requirements, visitor restrictions), customers tend to ",[601,610,611],{},"prefer geographically short and visually clean routes",".",[614,615,617],"h3",{"id":616},"common-customer-concerns","Common Customer Concerns",[619,620,621,628],"ul",{},[622,623,624,627],"li",{},[601,625,626],{},"Unexpected geographical crossings",": Routes may not always follow the shortest path due to constraints.",[622,629,630,633,634,637],{},[601,631,632],{},"Route splitting",": The optimizer may schedule work into ",[601,635,636],{},"multiple routes"," instead of a single one to prevent overtime.",[597,639,640,641,643],{},"The ",[601,642,595],{}," helps customers evaluate an optimization result by:",[645,646,647,653,659],"ol",{},[622,648,649,652],{},[601,650,651],{},"Modifying an existing solution"," (e.g., swapping the order of two nodes, moving nodes to other routes).",[622,654,655,658],{},[601,656,657],{},"Comparing the original and modified solution",", analyzing key differences.",[622,660,661,664],{},[601,662,663],{},"Providing a cost analysis"," to determine which solution is more optimal.",[666,667],"hr",{},[669,670,672],"h2",{"id":671},"overview","Overview",[619,674,675,682,688,694,700],{},[622,676,677],{},[678,679,681],"a",{"href":680},"#problem-statement","Problem Statement",[622,683,684],{},[678,685,687],{"href":686},"#how-the-comparison-works","How the Comparison Works",[622,689,690],{},[678,691,693],{"href":692},"#use-case-geographical-crossing-issue","Use Case: Geographical Crossing Issue",[622,695,696],{},[678,697,699],{"href":698},"#implementation-guide","Implementation Guide",[622,701,702],{},[678,703,705],{"href":704},"#closing-words","Closing Words",[666,707],{},[669,709,681],{"id":710},"problem-statement",[597,712,713,714,717,718,721],{},"Even though the optimizer finds the mathematically best solution, ",[601,715,716],{},"customers may perceive it differently",". This tool allows users to ",[601,719,720],{},"test modifications"," and analyze their impact.",[597,723,724],{},[601,725,726],{},"Example concerns:",[619,728,729,735,740],{},[622,730,731],{},[732,733,734],"em",{},"\"Why does the route cross this region multiple times?\"",[622,736,737],{},[732,738,739],{},"\"Can't the optimizer keep all jobs in a single route?\"",[622,741,742],{},[732,743,744],{},"\"Would swapping two locations reduce travel time?\"",[597,746,747,748,751],{},"By using this tool, customers can modify a solution ",[601,749,750],{},"based on their intuition"," and then compare it with the optimizer's result.",[753,754,755],"note",{},[597,756,757,758,763,764,612],{},"Please visit our GitHub-Page for ",[678,759,762],{"href":760,"target":761},"https:\u002F\u002Fgithub.com\u002FDNA-Evolutions\u002FJava-TourOptimizer-Examples\u002Fblob\u002Fmaster\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fdna\u002Fjopt\u002Ftouroptimizer\u002Fjava\u002Fexamples\u002Fexpert\u002Fcompareresult\u002FCompareResultsWithNodeExchangeExample.java","_blank","Node Exchange Example"," and ",[678,765,767],{"href":766,"target":761},"https:\u002F\u002Fgithub.com\u002FDNA-Evolutions\u002FJava-TourOptimizer-Examples\u002Fblob\u002Fmaster\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fdna\u002Fjopt\u002Ftouroptimizer\u002Fjava\u002Fexamples\u002Fexpert\u002Fcompareresult\u002FCompareResultsWithNodesMoveExample.java","Node Move Example",[597,769,770,771,774],{},"(If you are new to JOpt-TourOptimizer, please also read our page on setting up your ",[678,772,773],{"href":60},"first optimization",".)",[666,776],{},[669,778,687],{"id":779},"how-the-comparison-works",[597,781,640,782,784,785,788,789,612],{},[601,783,595],{}," allows users to apply ",[601,786,787],{},"modifications"," to an existing solution and generate a detailed ",[601,790,791],{},"comparison report",[645,793,794,800,806,812],{},[622,795,796,799],{},[601,797,798],{},"Modify the optimization result"," (e.g., swap the visit order of two locations).",[622,801,802,805],{},[601,803,804],{},"Run a comparison analysis"," between the original and modified results.",[622,807,808,811],{},[601,809,810],{},"Analyze the trade-offs",", such as distance reduction vs. potential constraint violations (e.g., late arrivals).",[622,813,814,817],{},[601,815,816],{},"Generate a detailed report",", listing cost differences and constraint violations.",[666,819],{},[669,821,693],{"id":822},"use-case-geographical-crossing-issue",[597,824,825,826,829],{},"Let's assume we run an optimization, and the result shows a ",[601,827,828],{},"geographical issue",":",[619,831,832,842],{},[622,833,834,835,838,839,612],{},"The optimizer schedules ",[601,836,837],{},"Duisburg before Krefeld",", even though swapping them would ",[601,840,841],{},"reduce travel distance",[622,843,844],{},"Customers may question why Duisburg is visited first when geographically, it seems better to go to Krefeld first.",[614,846,848],{"id":847},"original-route-before-modification","Original Route (Before Modification)",[619,850,851,858,867],{},[622,852,853,854,857],{},"Duisburg is visited ",[601,855,856],{},"before"," Krefeld.",[622,859,860,863,864,612],{},[601,861,862],{},"Total distance",": ",[601,865,866],{},"272 km",[622,868,869,612],{},[601,870,871],{},"No late violations",[597,873,874],{},[601,875,876],{},"Original Optimization Result:",[597,878,879],{},[880,881],"img",{"src":882,"style":883,"title":884,"alt":885},"\u002Fimages\u002Fdocs\u002Ftutorials\u002Fcomparison_tool\u002Fcomparison_tool_fig1_cap.png","width:50%","Click to enlarge","Placeholder for Original Route",[614,887,889],{"id":888},"modified-route-after-swapping-duisburg-krefeld","Modified Route (After Swapping Duisburg & Krefeld)",[619,891,892,904],{},[622,893,894,863,896,899,900,903],{},[601,895,862],{},[601,897,898],{},"238 km"," (",[601,901,902],{},"34 km saved",").",[622,905,906,909],{},[601,907,908],{},"New issue",": Late arrival at Duisburg (24.5 minutes).",[597,911,912],{},[601,913,914],{},"Modified Optimization Result:",[597,916,917],{},[880,918],{"src":919,"style":883,"title":884,"alt":920},"\u002Fimages\u002Fdocs\u002Ftutorials\u002Fcomparison_tool\u002Fcomparison_tool_fig2.png","Placeholder for Modified Route",[614,922,924],{"id":923},"comparison-summary","Comparison Summary",[926,927,928,947],"table",{},[929,930,931],"thead",{},[932,933,934,938,941,944],"tr",{},[935,936,937],"th",{},"Metric",[935,939,940],{},"Original Route",[935,942,943],{},"Modified Route",[935,945,946],{},"Difference",[948,949,950,967,985],"tbody",{},[932,951,952,958,960,962],{},[953,954,955],"td",{},[601,956,957],{},"Total Distance (km)",[953,959,866],{},[953,961,898],{},[953,963,964],{},[601,965,966],{},"-34 km",[932,968,969,974,977,980],{},[953,970,971],{},[601,972,973],{},"Late Violations",[953,975,976],{},"0 min",[953,978,979],{},"24.5 min",[953,981,982],{},[601,983,984],{},"+24.5 min",[932,986,987,992,997,1002],{},[953,988,989],{},[601,990,991],{},"Overall abstract Cost",[953,993,994],{},[601,995,996],{},"306.71",[953,998,999],{},[601,1000,1001],{},"316.39",[953,1003,1004],{},[601,1005,1006],{},"+9.68",[597,1008,1009,1012,1015],{},[601,1010,1011],{},"Result:",[1013,1014],"br",{},"\nThe optimizer's original solution is better because it avoids late violations, despite the longer travel distance.",[666,1017],{},[669,1019,699],{"id":1020},"implementation-guide",[614,1022,1024],{"id":1023},"_1-modify-an-existing-optimization-result","1. Modify an Existing Optimization Result",[597,1026,1027,1028,1032],{},"To modify a result, use ",[1029,1030,1031],"code",{},"exchangeNodes"," to swap the order of two locations:",[1034,1035,1040],"pre",{"className":1036,"code":1037,"language":1038,"meta":1039,"style":1039},"language-java shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","static IOptimizationResult exchangeNodes(IOptimization opti, String nodeOneId, String nodeTwoId)\n        throws InterruptedException, ExecutionException, InvalidLicenceException, ConvertException,\n        SerializationException, IOException {\n\n    IModificationTask moveTask = new ExchangeOptimizableNodesModificationTask(nodeOneId, nodeTwoId);\n\n    List\u003CIModificationTask> tasks = new ArrayList\u003C>();\n    tasks.add(moveTask);\n\n    return CompareResultExampleOptimization.applyTasksAndCreateModResult(opti, tasks);\n}\n","java","",[1029,1041,1042,1088,1112,1126,1133,1164,1169,1197,1215,1220,1246],{"__ignoreMap":1039},[1043,1044,1047,1051,1054,1058,1062,1065,1069,1072,1075,1078,1080,1082,1085],"span",{"class":1045,"line":1046},"line",1,[1043,1048,1050],{"class":1049},"spNyl","static",[1043,1052,1053],{"class":1049}," IOptimizationResult",[1043,1055,1057],{"class":1056},"s2Zo4"," exchangeNodes",[1043,1059,1061],{"class":1060},"sMK4o","(",[1043,1063,1064],{"class":1049},"IOptimization",[1043,1066,1068],{"class":1067},"sTEyZ"," opti",[1043,1070,1071],{"class":1060},",",[1043,1073,1074],{"class":1049}," String",[1043,1076,1077],{"class":1067}," nodeOneId",[1043,1079,1071],{"class":1060},[1043,1081,1074],{"class":1049},[1043,1083,1084],{"class":1067}," nodeTwoId",[1043,1086,1087],{"class":1060},")\n",[1043,1089,1091,1094,1096,1099,1101,1104,1106,1109],{"class":1045,"line":1090},2,[1043,1092,1093],{"class":1067},"        throws InterruptedException",[1043,1095,1071],{"class":1060},[1043,1097,1098],{"class":1067}," ExecutionException",[1043,1100,1071],{"class":1060},[1043,1102,1103],{"class":1067}," InvalidLicenceException",[1043,1105,1071],{"class":1060},[1043,1107,1108],{"class":1067}," ConvertException",[1043,1110,1111],{"class":1060},",\n",[1043,1113,1115,1118,1120,1123],{"class":1045,"line":1114},3,[1043,1116,1117],{"class":1067},"        SerializationException",[1043,1119,1071],{"class":1060},[1043,1121,1122],{"class":1067}," IOException ",[1043,1124,1125],{"class":1060},"{\n",[1043,1127,1129],{"class":1045,"line":1128},4,[1043,1130,1132],{"emptyLinePlaceholder":1131},true,"\n",[1043,1134,1136,1139,1142,1145,1149,1152,1154,1157,1159,1161],{"class":1045,"line":1135},5,[1043,1137,1138],{"class":1049},"    IModificationTask",[1043,1140,1141],{"class":1067}," moveTask ",[1043,1143,1144],{"class":1060},"=",[1043,1146,1148],{"class":1147},"s7zQu"," new",[1043,1150,1151],{"class":1056}," ExchangeOptimizableNodesModificationTask",[1043,1153,1061],{"class":1060},[1043,1155,1156],{"class":1067},"nodeOneId",[1043,1158,1071],{"class":1060},[1043,1160,1084],{"class":1067},[1043,1162,1163],{"class":1060},");\n",[1043,1165,1167],{"class":1045,"line":1166},6,[1043,1168,1132],{"emptyLinePlaceholder":1131},[1043,1170,1172,1175,1178,1181,1184,1187,1189,1191,1194],{"class":1045,"line":1171},7,[1043,1173,1174],{"class":1049},"    List",[1043,1176,1177],{"class":1060},"\u003C",[1043,1179,1180],{"class":1049},"IModificationTask",[1043,1182,1183],{"class":1060},">",[1043,1185,1186],{"class":1067}," tasks ",[1043,1188,1144],{"class":1060},[1043,1190,1148],{"class":1147},[1043,1192,1193],{"class":1049}," ArrayList",[1043,1195,1196],{"class":1060},"\u003C>();\n",[1043,1198,1200,1203,1205,1208,1210,1213],{"class":1045,"line":1199},8,[1043,1201,1202],{"class":1067},"    tasks",[1043,1204,612],{"class":1060},[1043,1206,1207],{"class":1056},"add",[1043,1209,1061],{"class":1060},[1043,1211,1212],{"class":1067},"moveTask",[1043,1214,1163],{"class":1060},[1043,1216,1218],{"class":1045,"line":1217},9,[1043,1219,1132],{"emptyLinePlaceholder":1131},[1043,1221,1223,1226,1229,1231,1234,1236,1239,1241,1244],{"class":1045,"line":1222},10,[1043,1224,1225],{"class":1147},"    return",[1043,1227,1228],{"class":1067}," CompareResultExampleOptimization",[1043,1230,612],{"class":1060},[1043,1232,1233],{"class":1056},"applyTasksAndCreateModResult",[1043,1235,1061],{"class":1060},[1043,1237,1238],{"class":1067},"opti",[1043,1240,1071],{"class":1060},[1043,1242,1243],{"class":1067}," tasks",[1043,1245,1163],{"class":1060},[1043,1247,1249],{"class":1045,"line":1248},11,[1043,1250,1251],{"class":1060},"}\n",[597,1253,1254,1255,1258],{},"This ",[601,1256,1257],{},"exchanges Duisburg and Krefeld",", altering the original route.",[666,1260],{},[614,1262,1264],{"id":1263},"_2-generate-the-modified-optimization-result","2. Generate the Modified Optimization Result",[597,1266,1267],{},"After an optimization run is completed, modify the original result:",[1034,1269,1271],{"className":1036,"code":1270,"language":1038,"meta":1039,"style":1039},"static IOptimizationResult createModResult(IOptimization opti, IOptimizationResult orgResult)\n        throws InterruptedException, ExecutionException, InvalidLicenceException, ConvertException,\n        SerializationException, IOException {\n\n    \u002F\u002F Modify result by swapping Duisburg and Krefeld\n    IOptimizationResult modResult = exchangeNodes(opti, \"Krefeld\", \"Duisburg\");\n\n    \u002F\u002F Print results\n    System.out.println(\"\\n\\n\\n#########################  RESULT ORG  #########################\\n\\n\\n\");\n    System.out.println(orgResult);\n\n    System.out.println(\"\\n\\n\\n#########################  RESULT MOD  #########################\\n\\n\\n\");\n    System.out.println(modResult);\n\n    return modResult;\n}\n",[1029,1272,1273,1297,1315,1325,1329,1335,1374,1378,1383,1414,1433,1437,1465,1485,1490,1501],{"__ignoreMap":1039},[1043,1274,1275,1277,1279,1282,1284,1286,1288,1290,1292,1295],{"class":1045,"line":1046},[1043,1276,1050],{"class":1049},[1043,1278,1053],{"class":1049},[1043,1280,1281],{"class":1056}," createModResult",[1043,1283,1061],{"class":1060},[1043,1285,1064],{"class":1049},[1043,1287,1068],{"class":1067},[1043,1289,1071],{"class":1060},[1043,1291,1053],{"class":1049},[1043,1293,1294],{"class":1067}," orgResult",[1043,1296,1087],{"class":1060},[1043,1298,1299,1301,1303,1305,1307,1309,1311,1313],{"class":1045,"line":1090},[1043,1300,1093],{"class":1067},[1043,1302,1071],{"class":1060},[1043,1304,1098],{"class":1067},[1043,1306,1071],{"class":1060},[1043,1308,1103],{"class":1067},[1043,1310,1071],{"class":1060},[1043,1312,1108],{"class":1067},[1043,1314,1111],{"class":1060},[1043,1316,1317,1319,1321,1323],{"class":1045,"line":1114},[1043,1318,1117],{"class":1067},[1043,1320,1071],{"class":1060},[1043,1322,1122],{"class":1067},[1043,1324,1125],{"class":1060},[1043,1326,1327],{"class":1045,"line":1128},[1043,1328,1132],{"emptyLinePlaceholder":1131},[1043,1330,1331],{"class":1045,"line":1135},[1043,1332,1334],{"class":1333},"sHwdD","    \u002F\u002F Modify result by swapping Duisburg and Krefeld\n",[1043,1336,1337,1340,1343,1345,1347,1349,1351,1353,1356,1360,1363,1365,1367,1370,1372],{"class":1045,"line":1166},[1043,1338,1339],{"class":1049},"    IOptimizationResult",[1043,1341,1342],{"class":1067}," modResult ",[1043,1344,1144],{"class":1060},[1043,1346,1057],{"class":1056},[1043,1348,1061],{"class":1060},[1043,1350,1238],{"class":1067},[1043,1352,1071],{"class":1060},[1043,1354,1355],{"class":1060}," \"",[1043,1357,1359],{"class":1358},"sfazB","Krefeld",[1043,1361,1362],{"class":1060},"\"",[1043,1364,1071],{"class":1060},[1043,1366,1355],{"class":1060},[1043,1368,1369],{"class":1358},"Duisburg",[1043,1371,1362],{"class":1060},[1043,1373,1163],{"class":1060},[1043,1375,1376],{"class":1045,"line":1171},[1043,1377,1132],{"emptyLinePlaceholder":1131},[1043,1379,1380],{"class":1045,"line":1199},[1043,1381,1382],{"class":1333},"    \u002F\u002F Print results\n",[1043,1384,1385,1388,1390,1393,1395,1398,1400,1402,1405,1408,1410,1412],{"class":1045,"line":1217},[1043,1386,1387],{"class":1067},"    System",[1043,1389,612],{"class":1060},[1043,1391,1392],{"class":1067},"out",[1043,1394,612],{"class":1060},[1043,1396,1397],{"class":1056},"println",[1043,1399,1061],{"class":1060},[1043,1401,1362],{"class":1060},[1043,1403,1404],{"class":1067},"\\n\\n\\n",[1043,1406,1407],{"class":1358},"#########################  RESULT ORG  #########################",[1043,1409,1404],{"class":1067},[1043,1411,1362],{"class":1060},[1043,1413,1163],{"class":1060},[1043,1415,1416,1418,1420,1422,1424,1426,1428,1431],{"class":1045,"line":1222},[1043,1417,1387],{"class":1067},[1043,1419,612],{"class":1060},[1043,1421,1392],{"class":1067},[1043,1423,612],{"class":1060},[1043,1425,1397],{"class":1056},[1043,1427,1061],{"class":1060},[1043,1429,1430],{"class":1067},"orgResult",[1043,1432,1163],{"class":1060},[1043,1434,1435],{"class":1045,"line":1248},[1043,1436,1132],{"emptyLinePlaceholder":1131},[1043,1438,1440,1442,1444,1446,1448,1450,1452,1454,1456,1459,1461,1463],{"class":1045,"line":1439},12,[1043,1441,1387],{"class":1067},[1043,1443,612],{"class":1060},[1043,1445,1392],{"class":1067},[1043,1447,612],{"class":1060},[1043,1449,1397],{"class":1056},[1043,1451,1061],{"class":1060},[1043,1453,1362],{"class":1060},[1043,1455,1404],{"class":1067},[1043,1457,1458],{"class":1358},"#########################  RESULT MOD  #########################",[1043,1460,1404],{"class":1067},[1043,1462,1362],{"class":1060},[1043,1464,1163],{"class":1060},[1043,1466,1468,1470,1472,1474,1476,1478,1480,1483],{"class":1045,"line":1467},13,[1043,1469,1387],{"class":1067},[1043,1471,612],{"class":1060},[1043,1473,1392],{"class":1067},[1043,1475,612],{"class":1060},[1043,1477,1397],{"class":1056},[1043,1479,1061],{"class":1060},[1043,1481,1482],{"class":1067},"modResult",[1043,1484,1163],{"class":1060},[1043,1486,1488],{"class":1045,"line":1487},14,[1043,1489,1132],{"emptyLinePlaceholder":1131},[1043,1491,1493,1495,1498],{"class":1045,"line":1492},15,[1043,1494,1225],{"class":1147},[1043,1496,1497],{"class":1067}," modResult",[1043,1499,1500],{"class":1060},";\n",[1043,1502,1504],{"class":1045,"line":1503},16,[1043,1505,1251],{"class":1060},[666,1507],{},[614,1509,1511],{"id":1510},"_3-compare-the-original-and-modified-solution","3. Compare the Original and Modified Solution",[597,1513,640,1514,1517],{},[1029,1515,1516],{},"compareResults"," function evaluates both solutions:",[1034,1519,1521],{"className":1036,"code":1520,"language":1038,"meta":1039,"style":1039},"static void compareResults(IOptimization opti, IOptimizationResult orgResult, IOptimizationResult modResult)\n        throws ResultStructureNotMatchingException {\n\n    \u002F\u002F Compare\n    Optional\u003CJobAdvantageResult> comparisonResultOptional = JobAdvantagesController.compare(orgResult, modResult);\n\n    if (comparisonResultOptional.isPresent()) {\n        JobAdvantageResult comparisonResult = comparisonResultOptional.get();\n\n        ICostAdvantagesInterpreter myInterpreter = new CostAdvantageInterpreter();\n\n        System.out.println(\"\\n\\n\\n#########################  COMPARISON RESULT  #########################\\n\\n\\n\");\n        System.out.println(myInterpreter.generateTextReport(comparisonResult));\n\n    } else {\n        System.out.println(\"Comparison failed\");\n    }\n}\n",[1029,1522,1523,1553,1560,1564,1569,1604,1608,1629,1650,1654,1671,1675,1703,1733,1737,1747,1770,1776],{"__ignoreMap":1039},[1043,1524,1525,1527,1530,1533,1535,1537,1539,1541,1543,1545,1547,1549,1551],{"class":1045,"line":1046},[1043,1526,1050],{"class":1049},[1043,1528,1529],{"class":1049}," void",[1043,1531,1532],{"class":1056}," compareResults",[1043,1534,1061],{"class":1060},[1043,1536,1064],{"class":1049},[1043,1538,1068],{"class":1067},[1043,1540,1071],{"class":1060},[1043,1542,1053],{"class":1049},[1043,1544,1294],{"class":1067},[1043,1546,1071],{"class":1060},[1043,1548,1053],{"class":1049},[1043,1550,1497],{"class":1067},[1043,1552,1087],{"class":1060},[1043,1554,1555,1558],{"class":1045,"line":1090},[1043,1556,1557],{"class":1067},"        throws ResultStructureNotMatchingException ",[1043,1559,1125],{"class":1060},[1043,1561,1562],{"class":1045,"line":1114},[1043,1563,1132],{"emptyLinePlaceholder":1131},[1043,1565,1566],{"class":1045,"line":1128},[1043,1567,1568],{"class":1333},"    \u002F\u002F Compare\n",[1043,1570,1571,1574,1576,1579,1581,1584,1586,1589,1591,1594,1596,1598,1600,1602],{"class":1045,"line":1135},[1043,1572,1573],{"class":1049},"    Optional",[1043,1575,1177],{"class":1060},[1043,1577,1578],{"class":1049},"JobAdvantageResult",[1043,1580,1183],{"class":1060},[1043,1582,1583],{"class":1067}," comparisonResultOptional ",[1043,1585,1144],{"class":1060},[1043,1587,1588],{"class":1067}," JobAdvantagesController",[1043,1590,612],{"class":1060},[1043,1592,1593],{"class":1056},"compare",[1043,1595,1061],{"class":1060},[1043,1597,1430],{"class":1067},[1043,1599,1071],{"class":1060},[1043,1601,1497],{"class":1067},[1043,1603,1163],{"class":1060},[1043,1605,1606],{"class":1045,"line":1166},[1043,1607,1132],{"emptyLinePlaceholder":1131},[1043,1609,1610,1613,1615,1618,1620,1623,1626],{"class":1045,"line":1171},[1043,1611,1612],{"class":1147},"    if",[1043,1614,899],{"class":1060},[1043,1616,1617],{"class":1067},"comparisonResultOptional",[1043,1619,612],{"class":1060},[1043,1621,1622],{"class":1056},"isPresent",[1043,1624,1625],{"class":1060},"())",[1043,1627,1628],{"class":1060}," {\n",[1043,1630,1631,1634,1637,1639,1642,1644,1647],{"class":1045,"line":1199},[1043,1632,1633],{"class":1049},"        JobAdvantageResult",[1043,1635,1636],{"class":1067}," comparisonResult ",[1043,1638,1144],{"class":1060},[1043,1640,1641],{"class":1067}," comparisonResultOptional",[1043,1643,612],{"class":1060},[1043,1645,1646],{"class":1056},"get",[1043,1648,1649],{"class":1060},"();\n",[1043,1651,1652],{"class":1045,"line":1217},[1043,1653,1132],{"emptyLinePlaceholder":1131},[1043,1655,1656,1659,1662,1664,1666,1669],{"class":1045,"line":1222},[1043,1657,1658],{"class":1049},"        ICostAdvantagesInterpreter",[1043,1660,1661],{"class":1067}," myInterpreter ",[1043,1663,1144],{"class":1060},[1043,1665,1148],{"class":1147},[1043,1667,1668],{"class":1056}," CostAdvantageInterpreter",[1043,1670,1649],{"class":1060},[1043,1672,1673],{"class":1045,"line":1248},[1043,1674,1132],{"emptyLinePlaceholder":1131},[1043,1676,1677,1680,1682,1684,1686,1688,1690,1692,1694,1697,1699,1701],{"class":1045,"line":1439},[1043,1678,1679],{"class":1067},"        System",[1043,1681,612],{"class":1060},[1043,1683,1392],{"class":1067},[1043,1685,612],{"class":1060},[1043,1687,1397],{"class":1056},[1043,1689,1061],{"class":1060},[1043,1691,1362],{"class":1060},[1043,1693,1404],{"class":1067},[1043,1695,1696],{"class":1358},"#########################  COMPARISON RESULT  #########################",[1043,1698,1404],{"class":1067},[1043,1700,1362],{"class":1060},[1043,1702,1163],{"class":1060},[1043,1704,1705,1707,1709,1711,1713,1715,1717,1720,1722,1725,1727,1730],{"class":1045,"line":1467},[1043,1706,1679],{"class":1067},[1043,1708,612],{"class":1060},[1043,1710,1392],{"class":1067},[1043,1712,612],{"class":1060},[1043,1714,1397],{"class":1056},[1043,1716,1061],{"class":1060},[1043,1718,1719],{"class":1067},"myInterpreter",[1043,1721,612],{"class":1060},[1043,1723,1724],{"class":1056},"generateTextReport",[1043,1726,1061],{"class":1060},[1043,1728,1729],{"class":1067},"comparisonResult",[1043,1731,1732],{"class":1060},"));\n",[1043,1734,1735],{"class":1045,"line":1487},[1043,1736,1132],{"emptyLinePlaceholder":1131},[1043,1738,1739,1742,1745],{"class":1045,"line":1492},[1043,1740,1741],{"class":1060},"    }",[1043,1743,1744],{"class":1147}," else",[1043,1746,1628],{"class":1060},[1043,1748,1749,1751,1753,1755,1757,1759,1761,1763,1766,1768],{"class":1045,"line":1503},[1043,1750,1679],{"class":1067},[1043,1752,612],{"class":1060},[1043,1754,1392],{"class":1067},[1043,1756,612],{"class":1060},[1043,1758,1397],{"class":1056},[1043,1760,1061],{"class":1060},[1043,1762,1362],{"class":1060},[1043,1764,1765],{"class":1358},"Comparison failed",[1043,1767,1362],{"class":1060},[1043,1769,1163],{"class":1060},[1043,1771,1773],{"class":1045,"line":1772},17,[1043,1774,1775],{"class":1060},"    }\n",[1043,1777,1779],{"class":1045,"line":1778},18,[1043,1780,1251],{"class":1060},[666,1782],{},[669,1784,1786],{"id":1785},"comparison-report-example","Comparison Report Example",[597,1788,1789],{},"After running the comparison, the report summarizes key differences:",[1034,1791,1796],{"className":1792,"code":1794,"language":1795},[1793],"language-text","#########################  COMPARISON RESULT  #########################\n\n1) =========== JOB - RESULT ==================\nOriginal Cost: 306.71\nModified Cost: 316.39\nDifference   : +9.68\nResult       : Original job has lower cost.\n\n2) =========== JOB - Violation Summaries ==================\nOriginal Route: No late violations.\nModified Route: 1 late violation at Duisburg (24.5 minutes).\n\n3) =========== Route Differences ==================\n- Distance Reduced: 34 km saved.\n- Late Violation: +24.5 minutes at Duisburg.\n","text",[1029,1797,1794],{"__ignoreMap":1039},[597,1799,1800],{},[601,1801,1802],{},"Next Steps:",[619,1804,1805,1811,1820],{},[622,1806,1807,1808,612],{},"Try modifying different ",[601,1809,1810],{},"node visit orders",[622,1812,1813,1814,763,1817,612],{},"Compare ",[601,1815,1816],{},"route splits",[601,1818,1819],{},"work distribution changes",[622,1821,1822,1823,1826,1827,612],{},"Optimize based on ",[601,1824,1825],{},"real-world constraints"," such as ",[601,1828,1829],{},"lateness penalties vs. travel distance",[666,1831],{},[669,1833,705],{"id":1834},"closing-words",[597,1836,1837,1838,1841,1842,763,1845,612],{},"This tool is a powerful way to ",[601,1839,1840],{},"fine-tune optimizer results"," and provide customers with valuable insights. It ensures that route optimizations are ",[601,1843,1844],{},"both mathematically sound",[601,1846,1847],{},"understandable to human users",[597,1849,1850],{},[601,1851,1852],{},"Key Takeaways:",[619,1854,1855,1860,1867,1878],{},[622,1856,640,1857,1859],{},[601,1858,595],{}," helps analyze modifications.",[622,1861,1862,1863,1866],{},"It can ",[601,1864,1865],{},"convince customers"," that the optimizer's decision is correct.",[622,1868,1869,1870,1873,1874,1877],{},"If the modified solution is ",[601,1871,1872],{},"better",", it may indicate ",[601,1875,1876],{},"insufficient computation time"," in the original optimization.",[622,1879,1880,1881,1884],{},"Customers can ",[601,1882,1883],{},"adjust optimizer settings"," based on insights from the comparison.",[666,1886],{},[669,1888,1890],{"id":1889},"authors","Authors",[597,1892,1893,1894,1900],{},"A product by ",[678,1895,1899],{"href":1896,"rel":1897},"https:\u002F\u002Fwww.dna-evolutions.com",[1898],"nofollow","DNA Evolutions"," ©.",[1902,1903,1904],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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 .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 .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 pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}",{"title":1039,"searchDepth":1090,"depth":1090,"links":1906},[1907,1908,1909,1910,1911,1916,1921,1922,1923],{"id":616,"depth":1114,"text":617},{"id":671,"depth":1090,"text":672},{"id":710,"depth":1090,"text":681},{"id":779,"depth":1090,"text":687},{"id":822,"depth":1090,"text":693,"children":1912},[1913,1914,1915],{"id":847,"depth":1114,"text":848},{"id":888,"depth":1114,"text":889},{"id":923,"depth":1114,"text":924},{"id":1020,"depth":1090,"text":699,"children":1917},[1918,1919,1920],{"id":1023,"depth":1114,"text":1024},{"id":1263,"depth":1114,"text":1264},{"id":1510,"depth":1114,"text":1511},{"id":1785,"depth":1090,"text":1786},{"id":1834,"depth":1090,"text":705},{"id":1889,"depth":1090,"text":1890},null,"md",{},{"icon":138},{"title":135,"description":1924},"DnBbCPnxn0eWoxcmKRxu1Jx-6LmvI05hm1iL68r3HJk",[1931,1932],{"title":130,"path":131,"stem":132,"description":1924,"icon":133,"children":-1},{"title":140,"path":141,"stem":142,"description":1924,"icon":143,"children":-1},1776184486033]