<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE article PUBLIC "-//NLM/DTD JATS (Z39.96) Journal Publishing DTD v1.2 20120330//EN" "http://jats.nlm.nih.gov/publishing/1.2/JATS-journalpublishing1.dtd">
    <!--<?xml-stylesheet type="text/xsl" href="article.xsl">-->
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:ns1="http://www.w3.org/1999/xlink" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" article-type="research-article" dtd-version="1.2" xml:lang="en">
	<front>
		<journal-meta>
			<journal-id journal-id-type="eissn">3034-1558</journal-id>
			<journal-title-group>
				<journal-title>Cifra. Информационные технологии и телекоммуникации</journal-title>
			</journal-title-group>
			<publisher>
				<publisher-name>ООО Цифра</publisher-name>
			</publisher>
		</journal-meta>
		<article-meta>
			<article-id pub-id-type="doi">10.60797/itech.2026.10.5</article-id>
			<article-categories>
				<subj-group>
					<subject>Brief communication</subject>
				</subj-group>
			</article-categories>
			<title-group>
				<article-title>Задача коммивояжёра с поворотными штрафами: постановка по тройкам вершин и алгоритмические схемы решения</article-title>
			</title-group>
			<contrib-group>
				<contrib contrib-type="author" corresp="yes">
					<name>
						<surname>Голод</surname>
						<given-names>Герман Матвеевич</given-names>
					</name>
					<email>germangolod@gmail.com</email>
					<xref ref-type="aff" rid="aff-1">1</xref>
				</contrib>
			</contrib-group>
			<aff id="aff-1">
				<institution-wrap>
					<institution-id institution-id-type="ROR">https://ror.org/04w8z7f34</institution-id>
					<institution content-type="education">Национальный исследовательский ядерный университет МИФИ</institution>
				</institution-wrap>
			</aff>
			<pub-date publication-format="electronic" date-type="pub" iso-8601-date="2026-04-14">
				<day>14</day>
				<month>04</month>
				<year>2026</year>
			</pub-date>
			<pub-date pub-type="collection">
				<year>2026</year>
			</pub-date>
			<volume>4</volume>
			<issue>10</issue>
			<fpage>1</fpage>
			<lpage>4</lpage>
			<history>
				<date date-type="received" iso-8601-date="2025-12-22">
					<day>22</day>
					<month>12</month>
					<year>2025</year>
				</date>
				<date date-type="accepted" iso-8601-date="2026-03-24">
					<day>24</day>
					<month>03</month>
					<year>2026</year>
				</date>
			</history>
			<permissions>
				<copyright-statement>Copyright: &amp;#x00A9; 2022 The Author(s)</copyright-statement>
				<copyright-year>2022</copyright-year>
				<license license-type="open-access" xlink:href="http://creativecommons.org/licenses/by/4.0/">
					<license-p>
						This is an open-access article distributed under the terms of the Creative Commons Attribution 4.0 International License (CC-BY 4.0), which permits unrestricted use, distribution, and reproduction in any medium, provided the original author and source are credited. See 
						<uri xlink:href="http://creativecommons.org/licenses/by/4.0/">http://creativecommons.org/licenses/by/4.0/</uri>
					</license-p>
					.
				</license>
			</permissions>
			<self-uri xlink:href="https://itech.cifra.science/archive/2-10-2026-april/10.60797/itech.2026.10.5"/>
			<abstract>
				<p>В статье рассматривается классическая задача коммивояжёра (TSP) и её вариация для маршрутизации на графах с поворотными штрафами, когда стоимость маршрута зависит не только от выбранных рёбер, но и от последовательности двух смежных переходов (троек вершин). Данная постановка формализуется через функцию стоимости второго порядка и соотносится с квадратичной задачей коммивояжёра (QTSP) и угловой постановкой (angular TSP). Представлен теоретический обзор результатов по сложности, аппроксимациям и наиболее эффективным алгоритмическим подходам к TSP. Предложены две взаимодополняющие схемы решения turn-cost модели: точная MILP-формулировка с линеаризацией тройных переходов и стандартными ограничениями на подтуры для малых и средних размеров, а также масштабируемая эвристическая схема для больших графов, основанная на разрежении кандидатных рёбер, локальном поиске типа k-opt и инкрементальном пересчёте поворотной компоненты целевой функции. Обсуждаются вычислительные ограничения моделей, оценка роста числа учитываемых троек при разрежении и область применимости подходов для задач практической маршрутизации.</p>
			</abstract>
			<kwd-group>
				<kwd>задача коммивояжёра</kwd>
				<kwd> маршрутизация</kwd>
				<kwd> штраф поворота</kwd>
				<kwd> стоимость по тройкам</kwd>
				<kwd> угловой TSP</kwd>
				<kwd> QTSP</kwd>
				<kwd> целочисленное программирование</kwd>
				<kwd> MILP</kwd>
				<kwd> локальный поиск</kwd>
				<kwd> 2-opt</kwd>
				<kwd> k-opt</kwd>
				<kwd> разрежение кандидатов</kwd>
			</kwd-group>
		</article-meta>
	</front>
	<body>
		<sec>
			<title>HTML-content</title>
			<p>1. Введение</p>
			<p>Задача коммивояжёра (TSP) является базовой моделью комбинаторной оптимизации и используется как эталон при развитии точных и эвристических методов решения NP-трудных задач. Современные обзоры подчёркивают, что даже при наличии сильных теоретических результатов (классические динамические схемы, аппроксимационные гарантии для метрических случаев, развитые MILP/branch-and-cut подходы) практическое масштабирование на сотни тысяч и миллионы узлов требует локального поиска, разрежения соседств и вычислительной инженерии.</p>
			<p>В транспортных и навигационных приложениях стоимость движения часто зависит не только от ребра (</p>
			<p>Цель: формализовать TSP с поворотными штрафами и предложить вычислительно реализуемый метод решения, согласованный с масштабированием.</p>
			<p>Основной вклад:</p>
			<p>1. Модель Turn-TSP со стоимостью по тройкам и нормализацией поворотного штрафа (для интерпретируемости </p>
			<p>2. MILP-постановка с линеаризацией троек (для малых </p>
			<p>3. Turn-aware эвристика: жадная инициализация второго порядка + локальный поиск </p>
			<p>4. Минимальная экспериментальная валидация на Rand2D и Grid инстансах, демонстрирующая эффект при </p>
			<p>2. Методы и принципы исследования</p>
			<p>Пусть задано множество вершин </p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mi>p</mml:mi>
					<mml:mi>:</mml:mi>
					<mml:mi>V</mml:mi>
					<mml:mi>×</mml:mi>
					<mml:mi>V</mml:mi>
					<mml:mi>×</mml:mi>
					<mml:mi>V</mml:mi>
					<mml:mo>→</mml:mo>
					<mml:msub>
						<mml:mi>ℝ</mml:mi>
						<mml:mrow>
							<mml:mo>≥</mml:mo>
							<mml:mn>0</mml:mn>
						</mml:mrow>
					</mml:msub>
					<mml:mo>,</mml:mo>
					<mml:mspace width="0.278em"/>
					<mml:mspace width="0.278em"/>
					<mml:mspace width="0.278em"/>
					<mml:mi>p</mml:mi>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mi>i</mml:mi>
					<mml:mo>,</mml:mo>
					<mml:mi>j</mml:mi>
					<mml:mo>,</mml:mo>
					<mml:mi>k</mml:mi>
					<mml:mo stretchy="false">)</mml:mo>
					<mml:mtext> - штраф при фрагменте </mml:mtext>
					<mml:mi>i</mml:mi>
					<mml:mo>→</mml:mo>
					<mml:mi>j</mml:mi>
					<mml:mo>→</mml:mo>
					<mml:mi>k</mml:mi>
					<mml:mo>.</mml:mo>
				</mml:mrow>
			</mml:math>
			<p>Ищется гамильтонов цикл </p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mi>F</mml:mi>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mi>τ</mml:mi>
					<mml:mo stretchy="false">)</mml:mo>
					<mml:mo>=</mml:mo>
					<mml:mi>D</mml:mi>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mi>τ</mml:mi>
					<mml:mo stretchy="false">)</mml:mo>
					<mml:mo>+</mml:mo>
					<mml:mi>λ</mml:mi>
					<mml:mi>P</mml:mi>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mi>τ</mml:mi>
					<mml:mo stretchy="false">)</mml:mo>
					<mml:mo>=</mml:mo>
					<mml:msubsup>
						<mml:mo>∑</mml:mo>
						<mml:mrow>
							<mml:mi>t</mml:mi>
							<mml:mo>=</mml:mo>
							<mml:mn>1</mml:mn>
						</mml:mrow>
						<mml:mrow>
							<mml:mi>n</mml:mi>
						</mml:mrow>
					</mml:msubsup>
					<mml:mi>d</mml:mi>
					<mml:mrow>
						<mml:mo stretchy="true" fence="true" form="prefix">(</mml:mo>
						<mml:msub>
							<mml:mi>v</mml:mi>
							<mml:mrow>
								<mml:mi>t</mml:mi>
							</mml:mrow>
						</mml:msub>
						<mml:mo>,</mml:mo>
						<mml:msub>
							<mml:mi>v</mml:mi>
							<mml:mrow>
								<mml:mi>t</mml:mi>
								<mml:mo>+</mml:mo>
								<mml:mn>1</mml:mn>
							</mml:mrow>
						</mml:msub>
						<mml:mo stretchy="true" fence="true" form="postfix">)</mml:mo>
					</mml:mrow>
					<mml:mo>+</mml:mo>
					<mml:mi>λ</mml:mi>
					<mml:msubsup>
						<mml:mo>∑</mml:mo>
						<mml:mrow>
							<mml:mi>t</mml:mi>
							<mml:mo>=</mml:mo>
							<mml:mn>1</mml:mn>
						</mml:mrow>
						<mml:mrow>
							<mml:mi>n</mml:mi>
						</mml:mrow>
					</mml:msubsup>
					<mml:mover>
						<mml:mrow>
							<mml:mi>p</mml:mi>
						</mml:mrow>
						<mml:mo stretchy="false">~</mml:mo>
					</mml:mover>
					<mml:mrow>
						<mml:mo stretchy="true" fence="true" form="prefix">(</mml:mo>
						<mml:msub>
							<mml:mi>v</mml:mi>
							<mml:mrow>
								<mml:mi>t</mml:mi>
								<mml:mo>−</mml:mo>
								<mml:mn>1</mml:mn>
							</mml:mrow>
						</mml:msub>
						<mml:mo>,</mml:mo>
						<mml:msub>
							<mml:mi>v</mml:mi>
							<mml:mrow>
								<mml:mi>t</mml:mi>
							</mml:mrow>
						</mml:msub>
						<mml:mo>,</mml:mo>
						<mml:msub>
							<mml:mi>v</mml:mi>
							<mml:mrow>
								<mml:mi>t</mml:mi>
								<mml:mo>+</mml:mo>
								<mml:mn>1</mml:mn>
							</mml:mrow>
						</mml:msub>
						<mml:mo stretchy="true" fence="true" form="postfix">)</mml:mo>
					</mml:mrow>
				</mml:mrow>
			</mml:math>
			<p>где индексы по модулю </p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mover>
						<mml:mrow>
							<mml:mi>p</mml:mi>
						</mml:mrow>
						<mml:mo stretchy="false">~</mml:mo>
					</mml:mover>
				</mml:mrow>
			</mml:math>
			<p>Замечание 1 (Зачем нужна нормализация). Без нормализации масштаб </p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mover>
						<mml:mrow>
							<mml:mi>p</mml:mi>
						</mml:mrow>
						<mml:mo stretchy="false">~</mml:mo>
					</mml:mover>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mi>i</mml:mi>
					<mml:mo>,</mml:mo>
					<mml:mi>j</mml:mi>
					<mml:mo>,</mml:mo>
					<mml:mi>k</mml:mi>
					<mml:mo stretchy="false">)</mml:mo>
					<mml:mo>=</mml:mo>
					<mml:mfrac>
						<mml:mrow>
							<mml:mi>θ</mml:mi>
							<mml:mo stretchy="false">(</mml:mo>
							<mml:mi>i</mml:mi>
							<mml:mo>,</mml:mo>
							<mml:mi>j</mml:mi>
							<mml:mo>,</mml:mo>
							<mml:mi>k</mml:mi>
							<mml:mo stretchy="false">)</mml:mo>
						</mml:mrow>
						<mml:mrow>
							<mml:mi>π</mml:mi>
						</mml:mrow>
					</mml:mfrac>
					<mml:mo>∈</mml:mo>
					<mml:mo stretchy="false">[</mml:mo>
					<mml:mn>0</mml:mn>
					<mml:mo>,</mml:mo>
					<mml:mn>1</mml:mn>
					<mml:mo stretchy="false">]</mml:mo>
				</mml:mrow>
			</mml:math>
			<p>где </p>
			<p>Пусть вершинам соответствуют координаты </p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msub>
						<mml:mi>x</mml:mi>
						<mml:mrow>
							<mml:mi>v</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:mo>∈</mml:mo>
					<mml:msup>
						<mml:mi>ℝ</mml:mi>
						<mml:mrow>
							<mml:mn>2</mml:mn>
						</mml:mrow>
					</mml:msup>
				</mml:mrow>
			</mml:math>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mi>θ</mml:mi>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mi>i</mml:mi>
					<mml:mo>,</mml:mo>
					<mml:mi>j</mml:mi>
					<mml:mo>,</mml:mo>
					<mml:mi>k</mml:mi>
					<mml:mo stretchy="false">)</mml:mo>
					<mml:mo>=</mml:mo>
					<mml:mi>arccos</mml:mi>
					<mml:mfrac>
						<mml:mrow>
							<mml:mrow>
								<mml:mo stretchy="true" fence="true" form="prefix">(</mml:mo>
								<mml:msub>
									<mml:mi>x</mml:mi>
									<mml:mrow>
										<mml:mi>i</mml:mi>
									</mml:mrow>
								</mml:msub>
								<mml:mo>−</mml:mo>
								<mml:msub>
									<mml:mi>x</mml:mi>
									<mml:mrow>
										<mml:mi>j</mml:mi>
									</mml:mrow>
								</mml:msub>
								<mml:mo stretchy="true" fence="true" form="postfix">)</mml:mo>
							</mml:mrow>
							<mml:mi>·</mml:mi>
							<mml:mrow>
								<mml:mo stretchy="true" fence="true" form="prefix">(</mml:mo>
								<mml:msub>
									<mml:mi>x</mml:mi>
									<mml:mrow>
										<mml:mi>k</mml:mi>
									</mml:mrow>
								</mml:msub>
								<mml:mo>−</mml:mo>
								<mml:msub>
									<mml:mi>x</mml:mi>
									<mml:mrow>
										<mml:mi>j</mml:mi>
									</mml:mrow>
								</mml:msub>
								<mml:mo stretchy="true" fence="true" form="postfix">)</mml:mo>
							</mml:mrow>
						</mml:mrow>
						<mml:mrow>
							<mml:mrow>
								<mml:mo stretchy="true" fence="true" form="prefix">‖</mml:mo>
								<mml:msub>
									<mml:mi>x</mml:mi>
									<mml:mrow>
										<mml:mi>i</mml:mi>
									</mml:mrow>
								</mml:msub>
								<mml:mo>−</mml:mo>
								<mml:msub>
									<mml:mi>x</mml:mi>
									<mml:mrow>
										<mml:mi>j</mml:mi>
									</mml:mrow>
								</mml:msub>
								<mml:mo stretchy="true" fence="true" form="postfix">‖</mml:mo>
							</mml:mrow>
							<mml:mi>·</mml:mi>
							<mml:mrow>
								<mml:mo stretchy="true" fence="true" form="prefix">‖</mml:mo>
								<mml:msub>
									<mml:mi>x</mml:mi>
									<mml:mrow>
										<mml:mi>k</mml:mi>
									</mml:mrow>
								</mml:msub>
								<mml:mo>−</mml:mo>
								<mml:msub>
									<mml:mi>x</mml:mi>
									<mml:mrow>
										<mml:mi>j</mml:mi>
									</mml:mrow>
								</mml:msub>
								<mml:mo stretchy="true" fence="true" form="postfix">‖</mml:mo>
							</mml:mrow>
						</mml:mrow>
					</mml:mfrac>
					<mml:mo>∈</mml:mo>
					<mml:mo stretchy="false">[</mml:mo>
					<mml:mn>0</mml:mn>
					<mml:mo>,</mml:mo>
					<mml:mi>π</mml:mi>
					<mml:mo stretchy="false">]</mml:mo>
					<mml:mo>,</mml:mo>
				</mml:mrow>
			</mml:math>
			<p>и положим </p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mover>
						<mml:mrow>
							<mml:mi>p</mml:mi>
						</mml:mrow>
						<mml:mo stretchy="false">~</mml:mo>
					</mml:mover>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mi>i</mml:mi>
					<mml:mo>,</mml:mo>
					<mml:mi>j</mml:mi>
					<mml:mo>,</mml:mo>
					<mml:mi>k</mml:mi>
					<mml:mo stretchy="false">)</mml:mo>
					<mml:mo>=</mml:mo>
					<mml:mi>θ</mml:mi>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mi>i</mml:mi>
					<mml:mo>,</mml:mo>
					<mml:mi>j</mml:mi>
					<mml:mo>,</mml:mo>
					<mml:mi>k</mml:mi>
					<mml:mo stretchy="false">)</mml:mo>
					<mml:mo>/</mml:mo>
					<mml:mi>π</mml:mi>
				</mml:mrow>
			</mml:math>
			<p>Введём бинарные переменные</p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msub>
						<mml:mi>x</mml:mi>
						<mml:mrow>
							<mml:mi>i</mml:mi>
							<mml:mi>j</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:mo>∈</mml:mo>
					<mml:mo stretchy="false">{</mml:mo>
					<mml:mn>0</mml:mn>
					<mml:mo>,</mml:mo>
					<mml:mn>1</mml:mn>
					<mml:mo stretchy="false">}</mml:mo>
					<mml:mtext> (дуга </mml:mtext>
					<mml:mi>i</mml:mi>
					<mml:mo>→</mml:mo>
					<mml:mi>j</mml:mi>
					<mml:mtext> в туре), </mml:mtext>
					<mml:mspace width="1em"/>
					<mml:msub>
						<mml:mi>z</mml:mi>
						<mml:mrow>
							<mml:mi>i</mml:mi>
							<mml:mi>j</mml:mi>
							<mml:mi>k</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:mo>∈</mml:mo>
					<mml:mo stretchy="false">{</mml:mo>
					<mml:mn>0</mml:mn>
					<mml:mo>,</mml:mo>
					<mml:mn>1</mml:mn>
					<mml:mo stretchy="false">}</mml:mo>
					<mml:mtext> (в туре встречается </mml:mtext>
					<mml:mi>i</mml:mi>
					<mml:mo>→</mml:mo>
					<mml:mi>j</mml:mi>
					<mml:mo>→</mml:mo>
					<mml:mi>k</mml:mi>
					<mml:mtext> ). </mml:mtext>
				</mml:mrow>
			</mml:math>
			<p>Цель:</p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mo>min</mml:mo>
					<mml:msub>
						<mml:mo>∑</mml:mo>
						<mml:mrow>
							<mml:mi>i</mml:mi>
							<mml:mo>≠</mml:mo>
							<mml:mi>j</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:msub>
						<mml:mi>d</mml:mi>
						<mml:mrow>
							<mml:mi>i</mml:mi>
							<mml:mi>j</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:msub>
						<mml:mi>x</mml:mi>
						<mml:mrow>
							<mml:mi>i</mml:mi>
							<mml:mi>j</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:mo>+</mml:mo>
					<mml:mi>λ</mml:mi>
					<mml:msub>
						<mml:mo>∑</mml:mo>
						<mml:mrow>
							<mml:mi>i</mml:mi>
							<mml:mo>,</mml:mo>
							<mml:mi>j</mml:mi>
							<mml:mo>,</mml:mo>
							<mml:mi>k</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:msub>
						<mml:mover>
							<mml:mrow>
								<mml:mi>p</mml:mi>
							</mml:mrow>
							<mml:mo stretchy="false">~</mml:mo>
						</mml:mover>
						<mml:mrow>
							<mml:mi>i</mml:mi>
							<mml:mi>j</mml:mi>
							<mml:mi>k</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:msub>
						<mml:mi>z</mml:mi>
						<mml:mrow>
							<mml:mi>i</mml:mi>
							<mml:mi>j</mml:mi>
							<mml:mi>k</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:mo>.</mml:mo>
				</mml:mrow>
			</mml:math>
			<p>Ограничения «один вход/один выход»:</p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msub>
						<mml:mo>∑</mml:mo>
						<mml:mrow>
							<mml:mi>j</mml:mi>
							<mml:mo>≠</mml:mo>
							<mml:mi>i</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:msub>
						<mml:mi>x</mml:mi>
						<mml:mrow>
							<mml:mi>i</mml:mi>
							<mml:mi>j</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:mo>=</mml:mo>
					<mml:mn>1</mml:mn>
					<mml:mo>,</mml:mo>
					<mml:mspace width="1em"/>
					<mml:mo>∀</mml:mo>
					<mml:mi>i</mml:mi>
					<mml:mo>∈</mml:mo>
					<mml:mi>V</mml:mi>
					<mml:mo>,</mml:mo>
				</mml:mrow>
			</mml:math>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msub>
						<mml:mo>∑</mml:mo>
						<mml:mrow>
							<mml:mi>j</mml:mi>
							<mml:mo>≠</mml:mo>
							<mml:mi>i</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:msub>
						<mml:mi>x</mml:mi>
						<mml:mrow>
							<mml:mi>j</mml:mi>
							<mml:mi>i</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:mo>=</mml:mo>
					<mml:mn>1</mml:mn>
					<mml:mo>,</mml:mo>
					<mml:mspace width="1em"/>
					<mml:mo>∀</mml:mo>
					<mml:mi>i</mml:mi>
					<mml:mo>∈</mml:mo>
					<mml:mi>V</mml:mi>
					<mml:mo>.</mml:mo>
				</mml:mrow>
			</mml:math>
			<p>Линеаризация троек:</p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msub>
						<mml:mi>z</mml:mi>
						<mml:mrow>
							<mml:mi>i</mml:mi>
							<mml:mi>j</mml:mi>
							<mml:mi>k</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:mo>≤</mml:mo>
					<mml:msub>
						<mml:mi>x</mml:mi>
						<mml:mrow>
							<mml:mi>i</mml:mi>
							<mml:mi>j</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:mo>,</mml:mo>
				</mml:mrow>
			</mml:math>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msub>
						<mml:mi>z</mml:mi>
						<mml:mrow>
							<mml:mi>i</mml:mi>
							<mml:mi>j</mml:mi>
							<mml:mi>k</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:mo>≤</mml:mo>
					<mml:msub>
						<mml:mi>x</mml:mi>
						<mml:mrow>
							<mml:mi>j</mml:mi>
							<mml:mi>k</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:mo>,</mml:mo>
				</mml:mrow>
			</mml:math>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msub>
						<mml:mi>z</mml:mi>
						<mml:mrow>
							<mml:mi>i</mml:mi>
							<mml:mi>j</mml:mi>
							<mml:mi>k</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:mo>≥</mml:mo>
					<mml:msub>
						<mml:mi>x</mml:mi>
						<mml:mrow>
							<mml:mi>i</mml:mi>
							<mml:mi>j</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:mo>+</mml:mo>
					<mml:msub>
						<mml:mi>x</mml:mi>
						<mml:mrow>
							<mml:mi>j</mml:mi>
							<mml:mi>k</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:mo>−</mml:mo>
					<mml:mn>1</mml:mn>
				</mml:mrow>
			</mml:math>
			<p>для всех допустимых </p>
			<p>Замечание 2. MILP с тройками имеет </p>
			<p>Метод ориентирован на масштабирование и опирается на ключевые принципы современных TSP-эвристик: локальный поиск, разрежение соседств и вычислительная эффективность.</p>
			<p>Для каждой вершины </p>
			<p>Начальный тур строится жадно по критерию второго порядка. При текущем конце тура (vt-1Missing Mark : sub, vtMissing Mark : sub) следующая вершина kMissing Mark : sub выбирается как</p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mi>k</mml:mi>
					<mml:mo>=</mml:mo>
					<mml:munder>
						<mml:mrow>
							<mml:mo>argmin</mml:mo>
						</mml:mrow>
						<mml:mrow>
							<mml:mi>u</mml:mi>
							<mml:mo>∉</mml:mo>
							<mml:mi>τ</mml:mi>
						</mml:mrow>
					</mml:munder>
					<mml:mrow>
						<mml:mo stretchy="true" fence="true" form="prefix">[</mml:mo>
						<mml:mi>d</mml:mi>
						<mml:mrow>
							<mml:mo stretchy="true" fence="true" form="prefix">(</mml:mo>
							<mml:msub>
								<mml:mi>v</mml:mi>
								<mml:mrow>
									<mml:mi>t</mml:mi>
								</mml:mrow>
							</mml:msub>
							<mml:mo>,</mml:mo>
							<mml:mi>u</mml:mi>
							<mml:mo stretchy="true" fence="true" form="postfix">)</mml:mo>
						</mml:mrow>
						<mml:mo>+</mml:mo>
						<mml:mi>λ</mml:mi>
						<mml:mover>
							<mml:mrow>
								<mml:mi>p</mml:mi>
							</mml:mrow>
							<mml:mo stretchy="false">~</mml:mo>
						</mml:mover>
						<mml:mrow>
							<mml:mo stretchy="true" fence="true" form="prefix">(</mml:mo>
							<mml:msub>
								<mml:mi>v</mml:mi>
								<mml:mrow>
									<mml:mi>t</mml:mi>
									<mml:mo>−</mml:mo>
									<mml:mn>1</mml:mn>
								</mml:mrow>
							</mml:msub>
							<mml:mo>,</mml:mo>
							<mml:msub>
								<mml:mi>v</mml:mi>
								<mml:mrow>
									<mml:mi>t</mml:mi>
								</mml:mrow>
							</mml:msub>
							<mml:mo>,</mml:mo>
							<mml:mi>u</mml:mi>
							<mml:mo stretchy="true" fence="true" form="postfix">)</mml:mo>
						</mml:mrow>
						<mml:mo stretchy="true" fence="true" form="postfix">]</mml:mo>
					</mml:mrow>
					<mml:mo>.</mml:mo>
				</mml:mrow>
			</mml:math>
			<p>Тем самым поворотный штраф учитывается уже на этапе построения.</p>
			<p>В классическом 2-opt выбираются две дуги </p>
			<p>Ключевое наблюдение: 2-opt влияет на ограниченное число локальных троек возле вершин </p>
			<p>Утверждение 1 (Монотонность). Если </p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mi>V</mml:mi>
				</mml:mrow>
			</mml:math>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msub>
						<mml:mi>d</mml:mi>
						<mml:mrow>
							<mml:mi>i</mml:mi>
							<mml:mi>j</mml:mi>
						</mml:mrow>
					</mml:msub>
				</mml:mrow>
			</mml:math>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msub>
						<mml:mover>
							<mml:mrow>
								<mml:mi>p</mml:mi>
							</mml:mrow>
							<mml:mo stretchy="false">~</mml:mo>
						</mml:mover>
						<mml:mrow>
							<mml:mi>i</mml:mi>
							<mml:mi>j</mml:mi>
							<mml:mi>k</mml:mi>
						</mml:mrow>
					</mml:msub>
				</mml:mrow>
			</mml:math>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mi>λ</mml:mi>
					<mml:mo>≥</mml:mo>
					<mml:mn>0</mml:mn>
				</mml:mrow>
			</mml:math>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mi>d</mml:mi>
					<mml:mo>+</mml:mo>
					<mml:mi>λ</mml:mi>
					<mml:mover>
						<mml:mrow>
							<mml:mi>p</mml:mi>
						</mml:mrow>
						<mml:mo stretchy="false">~</mml:mo>
					</mml:mover>
					<mml:mtext> improved ⟵ false </mml:mtext>
				</mml:mrow>
			</mml:math>
			<p>- Без разрежения: полный перебор 2-opt даёт </p>
			<p>- С локальным ΔF: оценка одного кандидата делается за O(1) (константное число рёбер и локальных троек), поэтому полный 2-opt проход </p>
			<p>- С кандидатами размера K: перебор сокращается до порядка </p>
			<p>3. Основные результаты</p>
			<p>Использованы два класса инстансов:</p>
			<p>1. Rand2D_</p>
			<p>2. Grid_25x25: решётка 25×25 (625 вершин), как простой прокси «дорожной» структуры.</p>
			<p>Базовая стоимость </p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mover>
						<mml:mrow>
							<mml:mi>p</mml:mi>
						</mml:mrow>
						<mml:mo stretchy="false">~</mml:mo>
					</mml:mover>
				</mml:mrow>
			</mml:math>
			<p>- Baseline: Nearest Neighbor + 2-opt, оптимизирующие только </p>
			<p>- TurnAware: жадная инициализация по </p>
			<p>В качестве контрольной проверки при </p>
			<p>Таблица 1 иллюстрирует характерный эффект: TurnAware уменьшает поворотную компоненту </p>
			<table-wrap id="T1">
				<label>Table 1</label>
				<caption>
					<p>Сравнение Baseline и TurnAware при λ=1,0</p>
				</caption>
				<table>
					<tr>
						<td>Инстанс</td>
						<td>n</td>
						<td>FbaseMissing Mark : sub</td>
						<td>FturnMissing Mark : sub</td>
						<td>ΔF, %</td>
						<td>PbaseMissing Mark : sub</td>
						<td>PturnMissing Mark : sub</td>
						<td>ΔP, %</td>
					</tr>
					<tr>
						<td>Grid_25x25</td>
						<td>625</td>
						<td>2469,1</td>
						<td>1286,3</td>
						<td>47,9</td>
						<td>1823,2</td>
						<td>396,8</td>
						<td>78,2</td>
					</tr>
					<tr>
						<td>Rand2D_100</td>
						<td>100</td>
						<td>227,6</td>
						<td>56,9</td>
						<td>75,0</td>
						<td>219,5</td>
						<td>19,2</td>
						<td>91,3</td>
					</tr>
					<tr>
						<td>Rand2D_300</td>
						<td>300</td>
						<td>626,2</td>
						<td>119,5</td>
						<td>80,9</td>
						<td>611,3</td>
						<td>45,7</td>
						<td>92,5</td>
					</tr>
					<tr>
						<td>Rand2D_800</td>
						<td>800</td>
						<td>1667,9</td>
						<td>234,8</td>
						<td>85,9</td>
						<td>1643,0</td>
						<td>90,1</td>
						<td>94,5</td>
					</tr>
				</table>
			</table-wrap>
			<fig id="F1">
				<label>Figure 1</label>
				<caption>
					<p>График зависимости эффекта от λ</p>
				</caption>
				<alt-text>График зависимости эффекта от λ</alt-text>
				<graphic ns1:href="/media/images/2026-03-25/3d1b6ee1-331b-46d8-8046-187b8b9e7ce6.png"/>
			</fig>
			<p>TurnAware vs Baseline: улучшение по </p>
			<p>Baseline заметно быстрее, так как оптимизирует только </p>
			<p>4. Обсуждение</p>
			<p>Эксперименты показывают:</p>
			<p>- При </p>
			<p>- При </p>
			<p>- Увеличение </p>
			<p>- Для редакционной версии желательно добавить 3–5 повторов на каждом инстансе (разные seed) и вывести среднее и стандартное отклонение по </p>
			<p>- Для малых </p>
			<p>5. Заключение</p>
			<p>В статье предложена корректная постановка маршрутизации с поворотными штрафами как задачи второго порядка с целью </p>
		</sec>
		<sec sec-type="supplementary-material">
			<title>Additional File</title>
			<p>The additional file for this article can be found as follows:</p>
			<supplementary-material xmlns:xlink="http://www.w3.org/1999/xlink" id="S1" xlink:href="https://doi.org/10.5334/cpsy.78.s1">
				<!--[<inline-supplementary-material xlink:title="local_file" xlink:href="https://itech.cifra.science/media/articles/23019.docx">23019.docx</inline-supplementary-material>]-->
				<!--[<inline-supplementary-material xlink:title="local_file" xlink:href="https://itech.cifra.science/media/articles/23019.pdf">23019.pdf</inline-supplementary-material>]-->
				<label>Online Supplementary Material</label>
				<caption>
					<p>
						Further description of analytic pipeline and patient demographic information. DOI:
						<italic>
							<uri>https://doi.org/10.60797/itech.2026.10.5</uri>
						</italic>
					</p>
				</caption>
			</supplementary-material>
		</sec>
	</body>
	<back>
		<ack>
			<title>Acknowledgements</title>
			<p>Автор выражает искреннюю благодарность Т-Банку за инициативы, направленные на поддержку научных исследований и развитие академической среды. Реализуемые банком программы стали значимым источником мотивации и вдохновения при подготовке настоящей работы и способствовали углублённой проработке исследуемой темы.</p>
		</ack>
		<sec>
			<title>Competing Interests</title>
			<p/>
		</sec>
		<ref-list>
			<ref id="B1">
				<label>1</label>
				<mixed-citation publication-type="confproc">Saller S. A survey on approximability and exact algorithms for the traveling salesman problem variants / S. Saller, J. Koehler, A. Karrenbauer // Annals of Operations Research. — 2025. — № 351. — P. 2129–2190. — DOI: 10.1007/s10479-025-06641-5.</mixed-citation>
			</ref>
			<ref id="B2">
				<label>2</label>
				<mixed-citation publication-type="confproc">Alanzi A. Solving the traveling salesman problem with machine learning: a review of recent advances and challenges / A. Alanzi, M.E. Menai // Artificial Intelligence Review. — 2025. — № 58. — P. 267. — DOI: 10.1007/s10462-025-11267-x.</mixed-citation>
			</ref>
			<ref id="B3">
				<label>3</label>
				<mixed-citation publication-type="confproc">Sui J. A survey on deep learning-based algorithms for the traveling salesman problem / J. Sui, S. Ding, X. Huang [et al.] // Front. Comput. Sci. — 2025. — Vol. 19. — Art. 196322. — DOI: 10.1007/s11704-024-40490-y</mixed-citation>
			</ref>
			<ref id="B4">
				<label>4</label>
				<mixed-citation publication-type="confproc">Mariescu-Istodor R. Solving the Large-Scale TSP Problem in 1 h: Santa Claus Challenge 2020 / R. Mariescu-Istodor, P. Fränti // Frontiers in Robotics and AI. — 2021. — Vol. 8. — Art. 689908. — DOI: 10.3389/frobt.2021.689908.</mixed-citation>
			</ref>
			<ref id="B5">
				<label>5</label>
				<mixed-citation publication-type="confproc">Taillard É.D. A linearithmic heuristic for the travelling salesman problem / É.D. Taillard // European Journal of Operational Research. — 2022. — № 297 (2). — P. 442–450. — DOI: 10.1016/j.ejor.2021.05.034.</mixed-citation>
			</ref>
			<ref id="B6">
				<label>6</label>
				<mixed-citation publication-type="confproc">Formella A. A quasi-linear-time heuristic to solve the Traveling Salesman Problem / A. Formella // Journal of Computational Science. — 2024. — № 77. — Art. 102237. — DOI: 10.1016/j.jocs.2024.102237.</mixed-citation>
			</ref>
			<ref id="B7">
				<label>7</label>
				<mixed-citation publication-type="confproc">Skinderowicz R. Improving Ant Colony Optimization efficiency for solving large TSP instances / R. Skinderowicz // Applied Soft Computing. — 2022. — № 120. — Art. 108653. — DOI: 10.1016/j.asoc.2022.108653.</mixed-citation>
			</ref>
			<ref id="B8">
				<label>8</label>
				<mixed-citation publication-type="confproc">Jiongzhi Zh. A reinforced hybrid genetic algorithm for the traveling salesman problem / Zh. Jiongzhi, Zh. Jialun, Ch. Menglei [et al.] // Computers &amp;amp; Operations Research. — 2023. — № 157. — Art. 106249. — DOI: 10.1016/j.cor.2023.106249.</mixed-citation>
			</ref>
			<ref id="B9">
				<label>9</label>
				<mixed-citation publication-type="confproc">Pham Q.A. An Efficient Hybrid Genetic Algorithm for the Quadratic Traveling Salesman Problem / Q.A. Pham, H.C. Lau, M.H. Ha [et al.] // Proceedings of ICAPS 2023. — 2023. — DOI: 10.1609/icaps.v33i1.27212.</mixed-citation>
			</ref>
			<ref id="B10">
				<label>10</label>
				<mixed-citation publication-type="confproc">Cavagnini R. A tabu search with geometry-based sparsification methods for angular traveling salesman problems / R. Cavagnini, M. Schneider, A. Theiß // Networks. — 2023. — DOI: 10.1002/net.22180.</mixed-citation>
			</ref>
		</ref-list>
	</back>
	<fundings/>
</article>