Двухветвевые колонны: Колонны двухветвевые железобетонные — Компания Стройбург

Содержание

Колонны двухветвевые железобетонные — Компания Стройбург

Колонны двухветвевые железобетонные являются одними из наиболее востребованных ЖБИ, которые применяются при строительстве одноэтажных промышленных зданий. Производятся они из тяжелого бетона, поэтому обладают очень высокой прочностью. Выбор материала для их производства неслучаен. Ведь колонны должны во время своей эксплуатации выдерживать очень существенные нагрузки. И это не только силовое воздействие. Они должны быть устойчивыми к вибрациям, колебаниям. Для дополнительной надежности ЖБИ они армируются. Стальная арматура дополнительно подвергается антикоррозийной обработке. Это также делается в целях повышения надежности железобетонных изделий.

Бывают железобетонные колонны для промышленных зданий двух видов. Они различаются по положению на каркасе сооружения и бывают крайними и средними. Их различие состоит в том, что крайние колонны будут иметь специальные закладные изделия, предназначенные для крепления стеновых панелей.

К дополнительным достоинствам изделий можно отнести их морозостойкость и трещиностойкость. Эти качества позволяют гарантировать безопасность применения колонн в холодных регионах и в областях с повышенной сейсмической активностью.

Производители выпускают железобетонные колонны для промышленных зданий разных серий и по разным ГОСТам. Поэтому при их выборе надо ориентироваться на нормы, по которым они произведены, и нужно смотреть на их маркировку. В ней указывается типоразмер колонны, высота этажа сооружения (единица измерения – дециметр), номер армирования колонны по порядку, индекс бетона, тип закладных изделий, проницаемость бетона. Может быть обозначена и сейсмоактивность.

Используя в строительстве колонны двухветвевые железобетонные, можно возводить очень прочные и надежные каркасы одноэтажных зданий. Главное – подобрать изделия, которые подойдут для эксплуатации в определенной местности.

2КДП 168-3,4 по стандарту: Серия 1.

424.1-10

Колонны двухветвевые с проходом 2КДП 168-3,4 – это один из более чем трехсот различных типоразмеров колонн, запроектированных в качестве несущих и поддерживающих элементов в одноэтажных зданиях промышленного типа. Технические условия выпуска, рабочие чертежи и требования к изделиям этой марки прописаны в выпусках типового проекта Серия 1.424.1-10. При изготовлении производители также должны ориентироваться на указания ГОСТа 25628-90. Особенность конструкции данного вида колон состоит в разделении нижней части на две части, соединенные распорками, которые образовывают укрепленные проходы для крановых путей. Двухветвевые колонны — это монолитные изделия, выполненные из бетона и стали высочайшей прочности. Они отлично приспособлены для работы под большими нагрузками и потому пользуются большой популярностью в современном строительстве.

1. Варианты написания маркировки

Каждое отдельное железобетонное изделие снабжается определенной последовательностью буквенных и цифровых символов. Они несут в себе информацию о габаритных и технических параметрах того или иного материала и образуют марку элемента. Варианты маркирования определяются действующими техническими нормативами. Для двухветвевых колон это:

1. 2КДП 168;

2. 2КДП 168-1,3;

3. 2КДП 168-2,3;

4. 2КДП 168-2,4;

5. 2КДП 168-3,3;

6. 2КДП 168-3,4;

7. 2КДП 168-4,3;

8. 2КДП 168-4,4;

9. 2КДП 168-4,5;

10. 2КДП 168-5,3;

11. 2КДП 168-5,4;

12. 2КДП 168-6,3;

13. 2КДП 168-6,4;

14. 2КДП 168-7,4.

2. Основная сфера применения

Двухветвевые колонны 2КДП 168-3,4 предназначены для установки в одноэтажных промышленных зданиях отапливаемого и неотапливаемого типа, высота которых варьируется в пределах от 15,6 до 18 м. Ширина крановых проходов составляет не менее 400 мм, а грузоподъемность самих кранов – вплоть до 50 тонн. Колонны данного типа могут применяться в условиях агрессивной газовой среды и используются в разных климатических районах. Они выпускаются в нескольких вариациях (средние и крайние). При установке в зависимости от технического проекта между отдельными элементами соблюдается шаг в 6 или 12 м. Специально укрепленные элементы переносят даже повышенную сейсмическую активность (вплоть до 8 баллов по шкале Рихтера), а потому установка подобных изделий актуальна практически в любых регионах нашей страны.

3. Обозначения маркировки изделия

Как уже было сказано выше, правильное обозначение ЖБ элементов маркировочными символами определяется действующими стандартами. Марка двухветвевых колон с проходами 2КДП 168-3,4 имеет следующую структуру:

1. 2 – номер типоразмера изделия для здания конкретной высоты;

2. КДП – двухветвевая колонна с проходом;

3. 168 – высота здания сокращенная до дм.;

4. 3 – порядковый номер типа армирующей стали;

5. 4 — марка бетона.

Из расшифровки видно, что марка указывает на особенности конструкции и габариты колонны. Она часто используется при составлении технической документации, а при нанесении на сами железобетонные элементы дополняется более подробными сведениями об основных параметрах изделия:

Длина = 18100;

Ширина = 900;

Высота = 500;

Вес = 15500;

Объем бетона = 6,2;

Геометрический объем = 8,145.

Нанесение таких обозначений непосредственно на продукцию является обязательным условием выпуска, осуществляется черными стойкими красками и существенно облегчает процесс сортировки изделий.

4. Изготовление и основные характеристики

Главное условие успешного изготовления колон двухветвевых с проходом

Серии 1.424.1-10 – применение качественных высокопрочных материалов. Это бетон тяжелых марок от М300 до М500, обладающий повышенными показателями жесткости и трещиностойкости, а также пространственные каркасы из высоких классов стали А-ІІІ и Ат-ІVС. Элементы каркаса соединяются в проектное положение методом контактно-точечной сварки, помещаются в стальные опалубочные формы и заливаются бетонной смесью. Каждая металлическая деталь должна быть покрыта цементным слоем как минимум на 32 мм. Диаметр самих армирующих стержней составляет 30 мм.

Для удобства при изъятии готовых изделий из форм, а также при проведении погрузочных работ, правилами предписывается использование инвентарных строповочных приспособлений или строповочных петель. После формовки, термической обработки и распалубки готовые ЖБ элементы проходят комплекс приемо-сдаточных испытаний на прочность, трещиностойкость и соответствие внешних характеристик существующим требованиям.

5. Транспортировка и хранение

Хранятся колонны двухветвевые с проходом 2КДП 168-3,4 на специально оборудованных подготовленных площадках в ровных штабелях. Обязательными условиями безопасного складирования является применение послойной изоляции материалов деревянными инвентарными прокладками. Транспортировка железобетонных изделий осуществляется в зафиксированном горизонтальном положении: с помощью стальных лент или проволоки колонны закрепляют на определенном расстоянии от бортов кузова и так же, как и при складировании, прокладывают деревянными досками.

Уважаемые покупатели! Сайт носит информационный характер. Указанные на сайте информация не являются публичной офертой (ст.435 ГК РФ). Стоимость и наличие товара просьба уточнять в офисе продаж или по телефону 8 (800) 500-22-52

Колонна железобетонная 4КДП 156-1,5 с, 16900х900х500 мм

Предлагаем купить в компании ООО «Бетонгрупп» железобетонные колонны 4КДП 156-1,5 с, 16900х900х500мм, 16500 кг.

Колонны двухветвевые с проходами Серия 1.424.1-10.

Характеристики:

Серия 1.424.1-10
Марка 4КДП 156-1,5 с
Вес 16500 кг
Размер 16900х900х500
Способ строительства сборные
Форма сечения прямоугольные
Применение для промышленных зданий

Серия 1.424.1-10 — Железобетонные колонны двухветвевого сечения с проходами в уровне крановых путей для одноэтажных производственных зданий высотой 15.6, 16.8, 18м с мостовыми опорными кранами грузоподъемностью до 50 т.

Производство колонн для промышленных зданий определяет ГОСТ, которому подчиняется серия 1.424.1-10.

Основное требование к колоннам – способность выдерживать значительные вертикальные нагрузки.

Колонны из железобетона изготовляются из высокопрочных тяжелых бетонов с применением арматуры.

Основные характеристики железобетонных колонн: высокая несущая способность; устойчивость к влиянию всевозможных агрессивных сред; устойчивость к сейсмическим нагрузкам; морозостойкость; влагостойкость.

Двухветвевые колонны из железобетона — изделия особой формы, которые позволяют устраивать мостовые краны внутри заводских цехов.


Сертифицированные железобетонные колонны двухветвевые вы можете купить на нашем сайте с доставкой.

Преимущества работы с ООО «Бетонгрупп»:

• Используем сертифицированное и проверенное сырье. Соблюдаем все нормы и требования ГОСТ.

• Широкая линейка ЖБИ продукции и строительных материалов собственного производства.

• Помощь квалифицированных сотрудников в выборе товара и расчёте объёма заказа.

• Быстро скомплектуем и отгрузим заказ по вашему списку.

• Работаем с розницей и крупным оптом. Скидки при заказах большого объема для постоянных покупателей.

• Самовывоз. Доставка по УрФО нашим автотранспортом, по РФ – ЖД и ТК.

Получить консультацию о товаре можно у наших специалистов. Оперативно ответим на Ваши вопросы. Свяжитесь с нами «Контакты» Вам предоставят необходимую информацию для заказа:


Колонна железобетонная 4КДП 156-1,5 с, 16900х900х500мм, 16500 кг.

Железобетонные колонны

Завод «Баррикада» предлагает купить ЖБ колонны для возведения каркаса жилых и общественных зданий. Они правильно распределяют нагрузку, усиливают надежность, стабильность и устойчивость всей конструкции. Используются только для вертикальной установки.

Мы выпускаем железобетонные колонны с разными характеристиками в зависимости от требуемого назначения и эксплуатационных условий (климат, уровень осадков, этажность, предполагаемые нагрузки и т.д.). Вся продукция соответствует требованиям стандартов, что подтверждено сертификатами соответствия. Изделия устойчивы к деформации, механическим и ударным воздействиям, морозам и влаге.

Виды бетонных колонн и особенности конструкции

В производстве железобетонных колонн выпускают изделия с консолями и без, двухветвевые и прямоугольные. По типу сечения выделяют квадратные, прямоугольные и круглые. 

Они отличаются и по типу размещения при монтаже:

  • фасадные;
  • угловые;
  • для крайних и средних рядов.

     

По месту установки ЖБ колонны бывают:

  • нижние — монтируются на первых этажах, цоколях;
  • средние — для возведения средних этажей здания;
  • верхние — используют для последних этажей высотного строения;
  • бесстыковые — устанавливаются по всей высоте.

В конструкции колонн для многоэтажного жилого строительства предусмотрены выступы на уровне 2,5-3 м. На эти уступы укладывают поперечные балки перекрытий для возведения следующего этажа. 

Основой ЖБИ служит арматурная сетка из стальных прутьев. Коэффициент армирования и диаметр прута регламентированы ГОСТом для разных назначений. Бетонирование проводят в специальной опалубке. Для этого используют тяжелый бетон от класса М300 до М600. 

Эксперты компании проконсультируют по всем интересующим вас вопросам и помогут оформить заказ. Получить консультацию можно по телефону 8 (812) 406-83-27.

Колонны двухветвевые КДII-23 в регионе Ташкент, Узбекистан, цена 0 от BO’STANLIQ TEMIR BETON OOO

Двухветвевые колонны (также известные как колонны с проходом) являются типовыми конструкциями из тяжелого армированного бетона. Изделия предназначены преимущественно для промышленных одноэтажных зданий, оборудованных специальными электрическими опорными кранами с любыми нагрузками при работе. Помимо этого, двухветвевые колонны часто используются в зданиях и без кранов.
Конструкция железобетонных двухветвевых колонн имеет свою специфику — в нижней части изделие расходится на две ветви, между которыми закреплены специальные распорки. Конструкция имеет прямоугольное сечение. Надежную устойчивости при опирании на фундамент обеспечивает в нижней плоскости изделия предусмотрен стальной башмак с прорезями для анкерных болтов и других креплений. Двухветвевые колонны используются в неагрессивной и слабоагрессивной среде. Изделие рассчитано под сейсмическую активность до 6 баллов включительно
Двухветвевые железобетонные колонны изготавливаются из тяжелого бетона классом прочности до B40(М500). Данный вид бетона позволяет колоннам выдерживать как большое вертикальное давление общей конструкции, так и вибрации, вызванные работой мостовых кранов. Двухветвевые колонны обладают водонепроницаемостью марки W4-W5. Для усиления колонн используется высокопрочная сталь класса А-III морозостойкостью не ниже F50
Размеры изделий :12850x1300x600 мм

Подробную информацию о товаре просим уточнять у продавца, связавшись с ним по указанному выше телефону или посредством электронного запроса через форму обратной связи.

Отзывы о BO’STANLIQ TEMIR BETON OOO

В данный момент отзывов об этой компании нет.
Вы можете оставить свой отзыв.

Колонны металлические серия и типовые

ООО «МК Монтеко» производит колонны из металлических швеллеров и колонны из металлических труб, удобство монтажа которых делает эту продукцию незаменимой и востребованной на рынке строительства.

Компания «МК Монтеко» успешно изготавливает эту продукцию благодаря бесперебойной поставке поставщиками и отличному качеству проката.

Двухветвевая колонна металлическая

При выполнении заказа по строительству промышленного объекта наша компания «МК Монтеко» использует в ходе процесса серии двухветвевой конструкции, это позволяет повысить надежность и безопасность объекта. В состав двухветвевой конструкции входят прочные соединительные детали и ветви двутаврового или швеллерного сечения.

Для соблюдения качества выпускаемой продукции в ходе производства колонн мы придерживаемся требований ГОСТ и технических нормативов.

Элементы двухветвевой колонны выглядят как парные планки, они нужны для существенного повышения жесткости и устанавливаются между ветвями.

Колонна металлическая двутавровая

Область применения двутавровой колонны широка: мы используем ее при строительстве гражданских, промышленных и общественных объектов, в некоторых случаях такой тип материала используется и для строительства жилых домов.

Колонна с двутавровым сечением представляет из себя 2 металлические стойки, между которыми проходит стенка, соединенная со стойками сварными швами.

Типовые колонны металлические

Колонны типовые устанавливаются вертикально в качестве основы каркасной конструкции объекта, они просты в плане производства и за счет этого имеют не высокую цену.

Типовые металлические колонны бывают:

  • квадратного сечения
  • круглого сечения
  • сплошные.

В зависимости от используемого типа колонн, он может влиять на оформление и общий вид объекта, при выборе типа колонны следует обратить внимание и продумать, как она будет выглядеть в общем каркасе здания. 

С «МК Монтеко» ваш выбор будет безупречным!

Некоторые из наших проектов

Колоны. Подкрановые и обвязочные балки.

Подкрановые и обвязочные балки.

Для устройства каркасов одноэтажных и многоэтажных промышленных зданий применяют железобетонные и стальные колонны. Железобетонные колоны одноэтажных промышленных зданий могут быть с консолями и без них (если нет мостовых кранов). По расположению в плане их подразделяют на колонны средних и крайних рядов. В зависимости от поперечного сечения колонны бывают прямоугольные, таврового профиля и двухветвевые. Размеры поперечного сечения зависят от величины действующих нагрузок. Применяют такие унифицированные размеры сечений колонн: 400х400, 400х600, 400х800, 500х500, 500х600 и 500х800 мм — для прямоугольных; 400х600, 400х800 мм — для тавровых и 400х1000, 500х1300, 500х1400, 500х1500, 600х1400, 600х1900 и 600х2400 мм для двухветвевых. Колонны могут состоять из нескольких частей, которые собирают на строительной площадке.

Колонны с консолями состоят из надкрановой и подкрановой ветвей. Сечение надкранових ветвей чаще всего квадратное или прямоугольное: 400х400 или 500х500 мм. Кроме основных колонн для устройства фахверков используют фахверковые колонны. Их устанавливают вдоль здания при шаге крайних колонн 12 м и длине панелей стен 6 м, а также в торцах зданий. Для устройства каркасов многоэтажных зданий используют железобетонные колонны высотой на один, два и три этажа. Сечение колонн 400х400 и 400х600 мм . Соединение ригелей с колоннами может быть консольным и безконсольным. Стыки колонн устраивают на 600-1000 мм выше перекрытия.

Основные типы железобетонных колонн одноэтажных промышленных зданий

а) прямоугольного сечения для зданий без мостовых кранов при шаге 6м;

б) прямоугольного сечения для зданий без мостовых кранов при шаге 12м;

в) двухветвевые для зданий без мостовых кранов;

г) прямоугольного сечения для зданий с мостовыми кранами

д) двутаврового сечения для зданий с мостовыми кранами

е) двухветвевые для зданий с мостовыми кранами

1 — закладочная деталь для крепления несущей конструкции покрытия;

2 и 3 — то же, подкрановой балки;

4 — то же, стеновых панелей


Далее

Стальные колонны одноэтажных зданий могут иметь постоянное по высоте и переменное сечение. В свою очередь, колонны с переменным сечением могут иметь подкрановую часть сплошного и сквозного сечения. Сквозные колонны подразделяют на колонны с ветвями, соединенными связями, и колонны раздельные, которые состоят из независимо работающих шатровой и подкрановой ветвей. Колонны постоянного сечения используют в случае применении кранов грузоподъемностью до 20 т и высоте здания до 9,6 м. В случае, когда колонны в основном работают на центральное сжатие, применяют колонны сплошного сечения. Для изготовления сплошных колонн используют широкополочный прокатный или сплошной двутавр, а для сквозных колонн можно использовать двутавры, швеллеры и уголки. Раздельные колонны устраивают в зданиях с тяжелыми мостовыми кранами (125 т и больше). В нижней части колонн для соединения с фундаментами предусматривают стальные базы (башмаки). Базы к фундаментам крепят анкерными болтами, которые закладывают в фундамент при их изготовлении. Нижнюю опорную часть колонны вместе с базой покрывают бетоном.

Жесткость и устойчивость зданий достигаются установкой системы вертикальных и горизонтальных связей. Так, для снижения и перераспределения усилий, которые возникают в элементах каркаса от температурных и других влияний, здание разделяют на температурные блоки и в середине каждого блока устраивают вертикальные связи между колоннами: при шаге колонн 6 м — крестовые; при шаге колонн 12 м — портальные. Связи выполняют из уголков или швеллеров и приваривают к закладным частям колонн. Для обеспечения работы мостовых кранов на консоли колонн монтируют подкрановые балки, на которые укладывают рельсы. Подкрановые балки обеспечивают также дополнительную пространственную жесткость здания. Они могут быть железобетонные и стальные.

Git — git-ветка Документация

-d
—удалить

Удалить ветку. Филиал должен быть полностью объединен в его восходящая ветвь или в HEAD , если восходящая ветвь не была установлена ​​с --track или --set-upstream-to .

Ярлык для --delete --force .

—создать-рефлог

Создать reflog ветки. Это активирует запись все изменения, внесенные в ссылку на ветку, позволяющие использовать дату на основе выражений sha1, таких как «@{yesterday}».Обратите внимание, что в не голых репозиториях reflogs обычно включено по умолчанию параметром конфигурации core.logAllRefUpdates . Инвертированная форма --no-create-reflog только переопределяет более раннюю --create-reflog , но в настоящее время не отменяет настройку core.logAllRefUpdates .

—сила

Сбросить <название ветки> в <начальная точка>, даже если <название ветки> существует уже. Без -f ветка git отказывается изменять существующую ветку.В сочетании с -d (или --delete ) разрешить удаление филиал, независимо от его объединенного статуса, или даже от того, указывает на действительный коммит. В комбинации с -m (или --move ), разрешить переименование ветки, даже если новая имя ветки уже существует, то же самое относится и к -c (или --copy ).

—переместить

Переместить/переименовать ветку вместе с ее конфигурацией и reflog.

Ярлык для --move --force .

—копировать

Скопируйте ветку вместе с ее конфигурацией и reflog.

Ярлык для --copy --force .

—color[=<когда>]

цветных ветвей для выделения текущих, локальных и филиалы с удаленным отслеживанием. Значение должно быть всегда (по умолчанию), никогда или автоматически.

—без цвета

Отключить цвета ветвей, даже если файл конфигурации дает по умолчанию цветной вывод. То же, что --color=never .

—игнорировать регистр

Ветви сортировки и фильтрации нечувствительны к регистру.

—column[=<параметры>]
—без столбца

Показать список филиалов в столбцах. См. переменную конфигурации column.branch для синтаксиса опции. --столбец и --без столбца без опций эквивалентны всегда и никогда соответственно.

Этот параметр применим только в неподробном режиме.

—пульты

Перечислите или удалите (если используется с -d) ветки удаленного отслеживания. Объедините с --list , чтобы соответствовать необязательным шаблонам.

—все

Список ветвей удаленного отслеживания и локальных ветвей.Объедините с --list , чтобы соответствовать необязательным шаблонам.

—список

Список ветвей. С необязательным ... , например. гит branch --list 'maint-*' , перечислить только совпадающие ветки узор(ы).

—показать текущий

Вывести название текущей ветки. В отсоединенном состоянии HEAD, ничего не печатается.

-вв
—подробный

В режиме списка показать sha1 и зафиксировать строку темы для каждой головы вместе с отношение к вышестоящей ветке (если есть).Если дано дважды, выведите путь связанного рабочего дерева (если есть) и имя вышестоящего также ветке (см. также git remote show ). Обратите внимание, что путь к HEAD текущего рабочего дерева не будет напечатан (он всегда будет быть вашим текущим каталогом).

—тихий

Будьте тише при создании или удалении ветки, подавляя сообщения без ошибок.

—abbrev=

В подробном списке, который показывает имя объекта фиксации, показать самый короткий префикс, который состоит не менее чем из шестнадцатеричных цифр long, который однозначно ссылается на объект. Значение по умолчанию равно 7 и может быть переопределено с помощью core.abbrev . вариант конфигурации.

—без сокращения

Отображать полные sha1 в выходном списке, а не сокращать их.

—track[=(прямой|наследовать)]

При создании новой ветки настройте ветку .<имя>.remote и branch..merge записей конфигурации для настройки отслеживания «вверх по течению» конфигурация для новой ветки.Этот конфигурация скажет git показать взаимосвязь между две ветки в git status и git branch -v . Более того, он направляет git pull без аргументов для извлечения из вверх по течению, когда новая ветвь проверена.

В зависимости от необязательного аргумента выбирается точная восходящая ветвь: -t , --track или --track=direct означает использование начальной ветки себя как выше по течению; --track=inherit означает копирование восходящего потока конфигурация начальной ветки.

--track=direct используется по умолчанию, когда начальной точкой является ветвь удаленного отслеживания. Задайте для переменной конфигурации branch.autoSetupMerge значение false , если вы хотите, чтобы git switch , git checkout и git branch всегда вели себя так, как если бы --no-track были даны. Установите его на всегда , если вы хотите, чтобы это поведение, когда start-point — это либо локальная, либо удаленная ветвь отслеживания. Установите его на наследует , если вы хотите скопировать конфигурацию отслеживания из точка разветвления.

См. git-pull[1] и git-config[1] для дополнительного обсуждения как используются опции branch..remote и branch..merge .

—без отслеживания

Не устанавливайте «восходящую» конфигурацию, даже если Установлена ​​переменная конфигурации branch.autoSetupMerge.

—set-upstream

Поскольку этот параметр имел запутанный синтаксис, он больше не поддерживается. Вместо этого используйте --track или --set-upstream-to .

-u <восходящий поток>
—set-upstream-to=<восходящий поток>

Настройте информацию отслеживания , чтобы считается вышестоящей ветвью . Если нет <название ветки> указан, то по умолчанию используется текущая ветвь.

—unset-upstream

Удалить исходную информацию для . Если нет ветки указано, что по умолчанию используется текущая ветвь.

—редактировать-описание

Откройте редактор и отредактируйте текст, чтобы объяснить, что такое ветвь для использования различными другими командами (например,грамм. формат-патч , request-pull и merge (если включено)). Многострочные пояснения может быть использовано.

—содержит [<фиксация>]

Только список ветвей, содержащих указанную фиксацию (HEAD если не указано). Подразумевается --list .

—no-содержит [<фиксация>]

Только список ветвей, которые не содержат указанную фиксацию (ГОЛОВА, если не указано). Подразумевается --list .

—слияние [<фиксация>]

Перечислять только ветки, концы которых доступны из указанный коммит (HEAD, если не указан). Подразумевается --list .

—no-merged [<фиксация>]

Перечислять только ветки, концы которых недоступны из указанный коммит (HEAD, если не указан). Подразумевается --list .

<название филиала>

Имя ветки для создания или удаления.Новое имя ветки должно пройти все проверки, определенные git-check-ref-format[1]. Некоторые из этих проверок может ограничивать символы, разрешенные в имени ветки.

<начальная точка>

Новый заголовок ветки будет указывать на эту фиксацию. Это может быть задается как имя ветки, идентификатор фиксации или тег. Если это опция опущена, вместо нее будет использоваться текущий HEAD.

<старая ветка>

Имя существующей ветки для переименования.

<новая ветка>

Новое имя существующей ветки.Те же ограничения, что и для <название ветки> применяется.

—sort=<ключ>

Сортировка по заданному ключу. Префикс - для сортировки по убыванию порядок значения. Вы можете использовать опцию —sort= несколько раз, и в этом случае последний ключ становится основным ключ. Поддерживаемые ключи такие же, как в git. для каждой ссылки . Порядок сортировки по умолчанию соответствует значению, настроенному для branch.sort Переменная , если она существует, или сортировка на основе полное имя ссылки (включая ссылок/. .. префикс ). В этом списке сначала отсоединенный HEAD (если есть), затем локальные ветки и наконец, ветки удаленного отслеживания. См. git-config[1].

—указывает на <объект>

Только список ветвей данного объекта.

—format <формат>

Строка, интерполирующая %(имя поля) из отображаемой ссылки на ветку и объект, на который он указывает. Формат такой же, как это git-for-each-ref[1].

Управление ветвями в репозитории Git — Azure Repos

  • Статья
  • 4 минуты на чтение
  • 7 участников

Полезна ли эта страница?

да Нет

Любая дополнительная обратная связь?

Отзыв будет отправлен в Microsoft: при нажатии кнопки отправки ваш отзыв будет использован для улучшения продуктов и услуг Microsoft. Политика конфиденциальности.

Представлять на рассмотрение

В этой статье

Службы Azure DevOps | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018 – TFS 2017

Управляйте работой в репозитории Git вашей команды из представления Branches в Интернете. Настройте представление, чтобы отслеживать наиболее важные для вас ветки, чтобы быть в курсе изменений, внесенных вашей командой.

Просмотрите ветки вашего репозитория, выбрав Repos , Branches при просмотре вашего репозитория в Интернете.

Просмотрите ветки репозитория, выбрав Ветви при просмотре репозитория в Интернете.

Организация филиалов

Вкладка по умолчанию Mine на странице ветвей показывает ветки, которые вы создали, отправили изменения или добавили в избранное, а также ветку по умолчанию для репозитория, например main . На вкладке All перечислены все ветки в репозитории, а на вкладке Stale перечислены ветки в репозитории, в которых не было коммитов в течение трех месяцев или дольше.

Если вы не видите искомую ветку и считаете, что она могла быть удалена, см. раздел Восстановление удаленной ветки.

Отфильтруйте перечисленные ветви в любом из представлений ветвей, введя определенное имя или шаблон в поле Искать все ветви в правом верхнем углу.


Если ваша команда использует разделитель косой черты в именах ветвей, вы увидите сворачиваемое древовидное представление для этих ветвей.

Наконечник

Настоятельно рекомендуется использовать соглашение об именах для ваших ветвей. Рекомендации по именованию ветвей см. в разделе Принятие стратегии ветвления Git.

Добавить любимые ветки

Добавьте ветви из представления All в представление Mine , выбрав значок звездочки, чтобы добавить ветку в избранное. Отметьте несколько ветвей как избранные, выбрав значок звездочки в дереве рядом с папкой в ​​дереве. Удалите избранное, отключив звездочку или выбрав справа от звезды, чтобы открыть контекстное меню ветки, затем выбрав Удалить из избранного .

Просмотр обновлений в ваших филиалах

Имя каждой ветки содержит имя последнего участника ветки и ссылку на последнюю фиксацию в ветке. Выберите дату или время последней фиксации, чтобы просмотреть обновления ветки. Представление ветки также показывает количество коммитов, которые ветвь опережает и отстает от ветки с меткой Сравните .Используйте эту информацию, чтобы быстро проверить, насколько одна ветвь отклонилась от другой.

Если в ветке открыт запрос на вытягивание, вы можете увидеть его идентификатор запроса на вытягивание. Выберите запрос на вытягивание, чтобы открыть его и просмотреть детали.

Изменить ветвь сравнения

Передний и задний номера, указанные для каждой ветви, сравниваются с ветвью, помеченной в настоящее время . Сравните на странице «Ветви». Обновите свою ветку сравнения, чтобы увидеть, насколько далеко впереди или позади ваши ветки, показанные на странице, относятся к другой ветке в вашем репо:

  1. Выберите рядом с ветвью, которую вы хотите установить в качестве базовой для сравнения.
  2. Выберите Установить как ветвь сравнения .

Метка Compare переместится в эту ветвь, а в других ветвях на странице будет обновлено количество коммитов вперед/назад, чтобы отразить новое сравнение.

Просмотр истории филиалов

Просмотрите файлы в ветке или истории, выбрав значок рядом с именем ветки и выбрав Просмотреть файлы или Просмотреть историю . Просмотр файлов открывает представление Файлы в Интернете, чтобы вы могли просматривать файлы на основе самой последней фиксации в ветке. Просмотр истории показывает каждую фиксацию в истории ветвей. Выберите фиксацию из этой истории, чтобы увидеть изменения файла, сделанные в этой фиксации.

Изменить ветку по умолчанию

Вы можете использовать ветку, отличную от основной , для новых изменений или изменить основную линию разработки в своем репозитории. Чтобы изменить имя ветки по умолчанию для новых репозиториев, см. раздел Параметры и политики всех репозиториев.

Чтобы изменить ветку вашего репозитория по умолчанию для слияния новых запросов на вытягивание, вам нужно как минимум две ветки. Если есть только одна ветвь, это уже по умолчанию. Вы должны создать вторую ветвь, чтобы изменить значение по умолчанию.

  1. В репозитории проекта выберите Branches .

  2. На странице Ветви выберите Дополнительные параметры рядом с новой нужной ветвью по умолчанию и выберите Установить ветку по умолчанию .

  3. После того, как вы установите новую ветвь по умолчанию, вы можете удалить предыдущую ветвь по умолчанию, если хотите.

  1. Нажмите кнопку настроек в нижнем левом углу вашего проекта, чтобы открыть страницу администрирования проекта.

  2. Выберите репозиториев .

  3. Выберите репозиторий Git. Ваши ветки отображаются под вашим репо.

  4. Выберите рядом с ветвью, которую вы хотите установить по умолчанию, затем выберите Сделать ветвью по умолчанию .

  5. После того, как вы установили новую ветку по умолчанию, вы можете удалить предыдущую, если хотите.

  1. Нажмите кнопку настроек в вашем проекте, чтобы открыть страницу администрирования проекта.

  2. Выберите Контроль версий .

  3. Выберите репозиторий Git. Ваши ветки отображаются под вашим репо.

  4. Выберите рядом с ветвью, которую вы хотите установить по умолчанию, затем выберите Сделать ветвью по умолчанию .

  5. После того, как вы установили новую ветку по умолчанию, вы можете удалить предыдущую, если хотите.

Есть и другие аспекты, которые следует учитывать перед внесением этого изменения. Узнайте о них в этой статье об изменении ветки по умолчанию.

Генерация столбцов и метод разветвлений и разрезов к проблеме упаковки пропускной способности была названа проблемой упаковки пропускной способности.Для заданной сети с заданными затратами на дугу и пропускной способностью дуги желательно направлять вызовы (определяемые начальной и конечной точкой) через сеть, чтобы максимизировать прибыль от маршрутизируемых вызовов. Каждый такой вызов маршрутизируется по одному пути, и не все вызовы будут маршрутизироваться. Мы предлагаем методологию ветвления и отсечения в сочетании с генерацией столбцов для оптимального решения таких проблем. Мы изучаем альтернативные подходы в литературе и объясняем, как этот новый метод берет лучшее из всех компонентов методов, предложенных ранее.

Предлагаемый нами метод является новым, поскольку он включает основанную на линейном программировании эвристику для получения хороших нижних оценок, использует приподнятые минимальные покрытия, которые учитывают ограничения набора особого порядка, и динамически выбирает одну из трех альтернативных стратегий ветвления. Кроме того, всякий раз, когда создается новый столбец, он поднимается во все существующие разрезы. Мы также обсуждаем необходимость генерации всех связанных оптимальных решений линейной оптимизации, если кто-то хочет гарантировать, что полученное решение является оптимальным.Наши результаты вычислений обеспечивают решение проблем, ранее неразрешимых. 1. Введение — это задача комбинаторной оптимизации, возникающая в телекоммуникационных сетях, в которых потребность превышает пропускную способность и где вызовы «точка-точка» с различной пропускной способностью маршрутизируются в этой сети таким образом, что каждый вызов использует один путь.Эти проблемы возникают в технологии ATM и при маршрутизации видеоданных. Он принадлежит к широкому классу задач, связанных с потоками нескольких товаров, которые обычно связаны с коммуникационными, компьютерными, транспортными и распределительными сетевыми приложениями. Вызовы между парами узлов определяют товары, а ссылки, соединяющие узлы, представляют собой линии передачи в телекоммуникационной сети. Учитывая набор вызовов с их доходом и требованиями к полосе пропускания, а также ненаправленную сеть с ее фиксированными пропускными способностями и стоимостью дуги/звена, проблема состоит в том, чтобы назначить вызовы из таблицы запросов таким путям, чтобы пропускная способность сети не нарушалась, а прибыль была максимальной.

Когда можно разделить вызов между различными путями, проблема может быть решена с помощью методов линейного программирования. Однако существует множество телекоммуникационных проблем (а также приложений, не связанных с телекоммуникациями, см. Barnhart et al. [2000]), когда товар должен направляться по единственному пути. Это дополнительное требование усложняет задачу NP, и лишь немногие статьи посвящены методологии решения этой проблемы. Мы представляем метод, который недавно стал популярным для сложных, больших задач 0–1: выполнение генерации столбцов и строк в рамках поиска по дереву.Мы также включаем эвристику для улучшения границ задачи.

1.1 Формулировка задачи

Задача упаковки пропускной способности (BWP) может быть сформулирована как задача целочисленного программирования 0–1 в сети, определяемой узлами i и дугами или связями l , которые соединяют такие узлы. Путь состоит из маршрута для данного вызова i через набор ссылок, соединяющих исходный узел s i с конечным узлом t i .Целевая функция состоит в том, чтобы максимизировать прибыль, а решения, которые необходимо принять, заключаются в том, следует ли направлять данный вызов, и если он будет направлен, то определить, какой из нескольких путей выбрать для маршрутизации вызова.

Пусть переменная решения 0–1 x i j указывает, маршрутизируется ли вызов i по пути j . Тогда цель состоит в том, чтобы максимизировать прибыль от распределения вызовов по путям таким образом, чтобы вызовы назначались не более одного раза и пропускная способность каналов не нарушалась. Прибыль пути j определяется как доход от вызова i , r i за вычетом общей стоимости полосы пропускания при использовании ссылок в пути j (т.е., прибыль пути j , связанного с вызовом i , равна: ri−di∑l=1mδljcl), где δ L J 2 является индикатором, который равна один, когда ссылка L используется в пути J , D I - это требование (спрос) Call I , и c l — стоимость полосы пропускания на единицу при использовании канала l . Предположим, что в сети имеется n вызовов и m ссылок.

Затем со следующими обозначениями:

Call I : R I R I
D

D I
Требование пропускной способности (спрос) звонка I
S I , T I T I
Исходный узел Узел и клеммный узел вызова I
P I
Набор путей для вызова I
Link L :
Емкость ссылки l , в полосе пропускания
c i
стоимость полосы пропускания на канале l .
Переменная: x ij
l если вызов i назначен пути j ; 0 иначе.

Получаем задачу целочисленной линейной оптимизации:

max∑i−1,⋯,n∑j∈Pi[ri−di∑i−1,⋯,mδljcl]xij

В соответствии с :

∑j∈Sixij≤1∀i=1,…,n∈calls – ограничения маршрутизации (SOS)∑i=1,⋯,n∑j∈Piδljdixij≤bl∀1=1,…,m∈links -- capacityconstraints(KNAPSACKS)xij∈{0,1}∀i=1,…n,j∈Pi

Первый набор ограничений гарантирует, что каждый вызов либо маршрутизируется, либо нет, группируя пути по вызовам в непересекающиеся специальные группы. комплекты заказов.Второй набор ограничений представляет собой набор ограничений ранца, которые гарантируют, что пропускная способность канала не будет нарушена. Все переменные для данного вызова имеют общий коэффициент (требование к полосе пропускания для вызова) для каждого ограничения рюкзака. (Обратите внимание, что x ij = 1 подразумевается ограничениями маршрутизации, поэтому явно устанавливать верхнюю границу равной единице не нужно. )

1.2 Маленький пример

Мы проиллюстрируем структуру проблемы следующей задачей .

AОбразец телекоммуникационной сети с идентифицированными номерами узлов, номерами каналов, пропускной способностью каналов и стоимостью каналов. Также приведена примерная таблица вызовов.

3
Call Si / Ti Di / Ti di
1 1/3 10 420
2 1/4 7 380
1/10 6 400
4 1/ 6 390
5 2/7 5 500
6 2/6 5 490
7 2/5 7 400
8 3/10 2 150
9 3/4 4 450 450 450
10 3/5 8 500
11 4/6 6 850
12 12 6/3 200 200
13 7/10 5 370
14 8/2 6 500
15 8/10 5 5 340833 340819 16 8/5 2 120 120
17 9/2 6 460
18 9/3 8 8 450 450 9
19 5 360
9 10/2 5 90/2 5 170
  • Si = исходный узел

  • di = потребность в полосе пропускания

  • ti = конечный узел

  • r = доход

Эта проблема () затем переводится в следующую A-ma триксной структуры (), где есть набор специально упорядоченных ограничений набора и набор ограничений рюкзака, где в каждом рюкзаке все пути (переменные), связанные с вызовом, имеют одинаковый коэффициент. Причина такой общности заключается в том, что для данного вызова каждый из путей использует одинаковую полосу пропускания. Заметим, что пути от P1 до P4 относятся к вызову 1, пути от P5 до P10 относятся к вызову 18, а пути от P11 до P14 относятся к вызову 14.

Таблица 1

Ссылка Пути RHS


90 819 + Р1 Р2 Р3 П4 Р5 Р6 Р7 Р8 Р9 Р10 Р11 Р12 Р13 Р14 + SOS1 1 1 1 1 1 SOS2 1 1 1 1 1 1 1 SOS3 1 1 1 1 1 (1, 3) 10 8 8 8 6 9111 17 35 35 (1,8) 9113 8 6 40 9119 9113 (1,2) 6 6 6 6 25 (1,9) 10 10 8 6 6 20 (3,8) 10 10 10 8 8 8 6 20 (9,8) 10 8 8 8 9117 9116 9113 20 (9,6) 10 8 8 6 15 (6,8) 10 8 8 6 10

В этой статье мы тестируем наш подход, используя стандартные наборы данных, использованные в более ранней работе. Все задачи имеют одни и те же базовые два набора данных: таблицу вызовов и таблицу ссылок. В таблице вызовов перечислены исходные и конечные узлы вызова, его спрос и доход в единицах пропускной способности. В таблице ссылок для каждой ссылки указаны примыкающие к ней узлы, ее пропускная способность и стоимость единицы пропускной способности при использовании ссылки. Мы показываем пути, относящиеся только к трем вызовам (вызов 1: (узел 1 к узлу 3), вызов 18 (от 9 до 3) и вызов 14 (от 8 к 2)) этой задачи, чтобы проиллюстрировать структуру А-матрицы.

Поскольку в этой формулировке не требуется маршрутизировать вызов, необходимо рассматривать только выгодные пути. Хотя количество узлов в сети обычно невелико (<40 узлов в наших тестовых задачах), количество прибыльных путей быстро увеличивается с увеличением количества ссылок.

Паркер и Райан (1994) показали, что задача упаковки пропускной способности является NP-сложной, поскольку она содержит ряд ограничений рюкзака 0–1 как часть всего набора ограничений.

Даже для небольших сетей количество возможных путей, генерируемых для каждого вызова посредством чистого перечисления, может быть огромным.Нет необходимости нести эти первоначальные затраты на создание всех таких путей, когда у большинства из них не будет никакой возможности найти оптимальное решение. Вместо этого предпочитают генерировать столбцы только по мере необходимости, то есть только тогда, когда они будут улучшать lp-решение. Этот подход известен как «генерация столбца» и требует алгоритма «ценообразования», который либо генерирует такой столбец, либо доказывает, что такого столбца не существует. Поскольку решение линейного программирования служит верхней границей значения решения, желательно, чтобы эта верхняя граница была как можно ближе к истинному целочисленному решению.Можно усилить релаксацию линейного программирования, применяя секущие плоскости, которые более точно аппроксимируют выпуклую оболочку допустимых целочисленных точек.

При наличии хорошей верхней границы значения решения необходимо также иметь хорошую нижнюю границу решения, чтобы такая процедура ограничения, как метод ветвей и границ, работала эффективно. Мы используем основанную на lp эвристику для получения хороших нижних оценок задачи. В этой статье будет представлена ​​методология решения, которая включает в себя все эти методы и использует стратегию динамического ветвления, основанную на одновременной установке множества переменных в ноль, чтобы улучшить общий поиск.Начнем с обобщения предыдущих исследований по этой проблеме.

1.3 Предыдущая работа над этой проблемой

Первоначальная работа над проблемой упаковки полосы пропускания была сосредоточена на эвристических методах. Кокс и др. (1991) описал проблему динамической маршрутизации вызовов, в которой проблема упаковки пропускной способности решается как подзадача. Они не предполагали, что количество узлов в сети будет большим (от 30 до 50 узлов), но количество вызовов может достигать 100. Даже в разреженных сетях количество возможных путей для одного вызова может быть довольно большим. большой.Кроме того, количество возможных маршрутов увеличивается с плотностью сети. Кокс и др. использовали генетический алгоритм и подход, основанный на перестановках, для назначения пути. Каждое потенциальное решение представлено как изменение порядка вызовов и оценивается путем назначения кратчайшего пути, доступного после маршрутизации предыдущих вызовов в порядке. Андерсон и др. (1993) также использовали метод перестановки, но в пределах табу-поиска. Лагуна и Гловер (1993) разработали алгоритм поиска табу без перестановок, где потенциальными решениями являются оценки изменений в назначении пути для данного вызова.Гавиш и Алтинкемер (1990) и Фишер и др. (1994) использовали лагранжевую релаксацию, чтобы получить хорошие допустимые решения для особых случаев проблемы упаковки полосы пропускания. Amiri и Barkhi (1999) рассматривают многочасовую проблему упаковки пропускной способности, а также используют лагранжеву релаксацию для получения эвристических решений своих проблем. В ряде недавних работ изучалось, как назначать вызовы ссылкам, чтобы свести к минимуму задержку в очереди, когда поступления являются стохастическими: см. Rolland et al. (1999) и Amiri et al. (1999).

Поскольку наша статья посвящена доказательству оптимальности для сложных задач упаковки пропускной способности, мы уделяем больше времени изучению предыдущих работ по точным методам. Паркер и Райан (1994) описывают процедуру ветвей и границ генерации столбцов (также известную как ветвь и цена).

Задача была сформулирована как задача целочисленного программирования путем применения генерации столбцов на основе релаксации линейного программирования, встроенной в процедуру ветвей и границ. Их стратегия ветвления выбирает определенный дробный путь для данного вызова.Затем они создают тыс. + 1 ветвей. На k этих ветвей оговаривается, что вызов не может использовать arc/link j ( j = 1… k ). k + 1-й лист требует, чтобы вызов не использовал ни одну из дуг/связей. Они динамически устанавливают допуск оптимальности и решают все, кроме двух экземпляров своего набора задач, в пределах 95 % от оптимальности. Однако они доказывают оптимальность только двух из этих четырнадцати задач. Паркер и Райан не используют режущие плоскости.

Парк и др. (1996) встраивают секущие плоскости, основанные на приподнятых минимальных покрытиях (см. Padberg 1975), в генерацию столбцов, чтобы создать lp -релаксацию, и включают эти разрезы в процедуру ветвления и разреза. Разрезы не генерировались внутри дерева, если процедуры ветвления и цены не смогли доказать оптимальность в течение разумного периода времени. Затем в дереве ветвления также использовались процедуры секущей плоскости. Авторы использовали традиционную стратегию ветвления x i j = 0/1; однако для сравнения они реализовали упрощенную версию подхода Паркера и Райана и показали, что использование секущих плоскостей существенно сокращает время решения любого из правил ветвления.Отметим, что тестовый набор задач, использованный Park et al. были случайно сгенерированными проблемами, и оказалось, что их гораздо легче решить, чем те, которые представлены в работах Паркера и Райана или в статьях Гловера и Лагуны.

Недавно в двух других статьях использовался алгоритм «отсечения ветвей и цены» для решения задачи упаковки пропускной способности. Барнхарт и др. (2000) снова используют приподнятые минимальные покрытия в рамках подхода «отсечение ветвей и цена». Их стратегия ветвления отличается от таковой у Park et al. или Паркер и Райан.Они идентифицируют вызов, разделенный между двумя путями, а затем идентифицируют узел таким образом, что перед этим узлом два пути идентичны, и называют этот подпуть s . Они называют этот узел узлом расхождения , обозначенным d , и две дуги, которые вызывают расхождение a 1 и a 2 . Они разбивают все дуги, ведущие от расходящегося узла d , на два непересекающихся раздела, так что один набор A 1 содержит a 1 , а другой набор A 2 содержит a 2 .На одной ветви все пути, содержащие подпуть s и любую дугу в A 1 , обнуляются, а на другой ветви все пути, содержащие подпуть s и любую дугу в A 2 , обнуляются. Таким образом, этот метод ветвления имеет два свойства: (1) легко генерировать новые пути для вызова без изменения цен на новые столбцы и (2) многие переменные (пути) могут быть установлены равными нулю в одной ветви. Они используют поиск по дереву в глубину, чтобы получить хорошие допустимые решения на ранних этапах поиска.Они обнаружили, что на многих ветвях целевая функция мало изменилась из-за симметрии задачи. Поэтому они включили поднятые неравенства покрытия и выполнили это поднятие на основе алгоритма Gu et al. (1995). Заметим, что авторы не используют наборы специального порядка для усиления этих разрезов. Успех этих авторов побудил нас посмотреть, могут ли более сильные сокращения и эвристические методы улучшить их результаты.

Наконец, Geffard (2001) также использует подход «отсечение и цена отрасли».Здесь минимальные покрытия не поднимаются, а используется эвристика для получения хороших оценок. Авторы разветвляются по дугам для конкретного вызова, аналогично одной из трех стратегий ветвления, используемых в этой статье. Мы обсудим эту стратегию ветвления позже. Их тестирование показало, что использование эвристики значительно повысило производительность их кода.

1.4 Вклад в этот документ

По нашему мнению, вклад в этот документ включает:

  1. включение гораздо более сильных сокращений в код ветвления и цены для решения проблемы упаковки пропускной способности.Эти повышенные минимальные покрытия со специально упорядоченными наборами легко включаются в алгоритм ценообразования, и всякий раз, когда для данного вызова генерируется новый путь, который использует ссылку, ранее не использовавшуюся любыми путями для этого вызова, переменная (путь) равна включен во все сокращения, связанные с этой ссылкой. Этот расчет подъема недорог в выполнении.

  2. включение стратегии динамического ветвления, не требующей значительных изменений алгоритма ценообразования.

  3. включение эвристики lp на основе , которая быстро находит очень хорошие решения и может использоваться во всем дереве.

  4. решение ранее не решаемых задач в стандартном наборе тестов для задач упаковки пропускной способности.

  5. небольшой пример, иллюстрирующий необходимость генерации всех оптимальных решений задач линейного программирования на каждой ветви.

1.5 Схема

Оставшаяся часть этого документа организована следующим образом.Раздел 2 описывает каждый подалгоритм кода отсечения ветвей и цены. В разделе 3 представлены результаты расчетов по двум опубликованным наборам 13 тестовых задач. В разделе 4 представлены выводы и направления будущих исследований.

2. Методология решения

Поскольку ценообразование и обрезка являются дополнительными процедурами для ужесточения lp -ослабления, наш метод создает как столбцы, так и сокращения по всей ветви и связанному дереву. Поскольку существует слишком много возможных столбцов для эффективной обработки, и большинство из них будут иметь связанную переменную, равную нулю в оптимальном решении, более эффективный подход, чем перечисление, состоит в том, чтобы начать только с небольшого подмножества допустимых столбцов, а затем добавить другие по мере необходимости. нужный.Этот процесс называется «ценообразование» и использует информацию о сниженных затратах для добавления столбцов только , когда они могут повысить ценность решения линейного программирования.

Аналогичным образом, как было показано выше, добавление секущих плоскостей, основанных на многогранной структуре многогранника 0–1, является очень эффективным способом приближения линейного программирования к задаче целочисленного программирования.

Кроме того, мы добавляем основанную на lp ограничивающую эвристику для раннего получения хорошей ip -нижней границы и пытаемся обновить эту границу всякий раз, когда создаются столбцы и разрезы.Наличие как хорошей верхней границы, так и хорошей нижней границы позволяет фиксировать переменные на основе «разрыва» (то есть разницы между lp -решением и наиболее известным допустимым решением).

Базовый алгоритм начинается с решения lp -релаксации задачи BWP только с подмножеством путей S i – P i на вызов. Затем для каждого звонка мы генерируем столбцы (пути) на основе двойных цен. Когда никакие дополнительные столбцы не улучшат решение lp , мы начинаем генерировать секущие плоскости для каждого ограничения связи в сочетании со всем набором ограничений специального порядка (SOS).Эти секущие плоскости значительно прочнее тех, которые создаются при игнорировании ограничений SOS. Мы продолжаем циклически создавать разрезы и столбцы, пока не сможем найти дополнительные разрезы или столбцы для улучшения решения lp . На этом этапе мы выполняем поиск по дереву, где на каждой ветви дерева мы снова используем как столбец , так и генерацию разреза. Кроме того, мы используем эвристику на основе lp в дереве ветвления. представляет общий алгоритм.Мы представляем каждый из подалгоритмов ниже.

2.1 Решение первой линейной программы

Наш подход к созданию столбцов аналогичен подходу предыдущих авторов. Для первой линейной программы мы используем стоимость ссылок, чтобы определить хотя бы один кратчайший путь для каждого вызова. Там, где решение задачи о кратчайшем пути не является уникальным, мы генерируем всех кратчайших путей. Для наборов данных, в которых стоимость соединения была отличной от нуля, обычно имелся только один или два оптимальных пути для каждого вызова.Однако для наборов данных, где все затраты на ссылки были нулевыми, генерация всех кратчайших путей генерировала много за вызов, поэтому мы добавили только до 5 путей (столбцов) за вызов в начальной формулировке линейной программы. Однако до ветвления мы добавили всех путей вызова, у которых сниженная стоимость равнялась нулю. Этот подход отличается от подхода Паркера и Райана, которые используют только один кратчайший путь для решения проблемы, или от Парка и др. которые используют алгоритм k-кратчайшего пути (но в большинстве своих статей сообщают результаты тестов для k, равного 1).Учитывая хотя бы один путь для каждого вызова, мы решаем первые lp . Теперь мы представляем общий алгоритм ценообразования, который выполняется после каждого вызова lp .

2.2 Генерация столбцов

Согласно lp -теории двойственности, lp -решение является оптимальным тогда и только тогда, когда возможно двойственное решение. Если какое-либо из двойных ограничений не выполняется ни для одного вызова, то существует столбец или столбцы, которые были бы в базисе, если бы они были в lp -релаксации.Мы используем ту же схему генерации столбцов, что и Паркер и Райан. Кратко описано здесь. Пусть y i обозначают двойственные переменные, соответствующие ограничениям маршрутизации, z l и двойные переменные, соответствующие ограничениям пропускной способности y i , и пусть S i 2 подмножество путей в lp -релаксация. Назовите эту задачу LP S .

max∑i−1,⋯,n∑j∈Pi[ri−di∑i−1,⋯,mδljcl]xij

В соответствии с :

yi:∑j∈Sixij≤1∀i=1,…,n∈calls —routingconstraints(SOS)zl:∑i=1,⋯,n∑j∈Piδljdixij≤bl∀1=1,…,m ∈links —capacityconstraints(KNAPSACKS)xij∈{0,1}∀i=1,…n,j∈Si

Решение lp -релаксации с использованием подмножества путей S , ( LP S ) является оптимальным для lp -релаксации LP P тогда и только тогда, когда двойственное решение, возвращаемое симплекс-методом, допустимо для двойственного решения LP P . Двойное ограничение, связанное с переменной x i j (соответствующей вызову i с использованием пути j ):

yi+di∑l=1,⋯,mδljzl≥ri−di∑l=1,⋯,mδljclordi[∑l=1,⋯,mδlj(zl+cl)]≥ri−yi

, где δ lj = 1, если ссылка l находится на пути j ; 0 иначе.

Мы должны определить, находится ли путь j для вызова i в наборе путей P i , но не в наших сгенерированных путях S i , может улучшить S i , может улучшить LP 7 LP 0 решение.Таким образом, подзадача генерации столбцов, связанная с вызовом i , выглядит следующим образом:

mindi[∑l=,⋯,mδlj(zl*+cl)]subjectto:j∈Pi

где уи* и zl* — двойные значения, возвращаемые симплекс-методом в текущей lp -релаксации. Таким образом, для сети с весами ссылок di(zl*+cl) находится кратчайший путь от исходного узла к узлу назначения вызова i . Если решение этой задачи о кратчайшем пути имеет длину пути меньше ri−yi*, текущее lp -решение не является оптимальным.Путь j должен быть добавлен к задаче и перерешена линейная программа. Поскольку веса ссылок неотрицательны, можно использовать модифицированный алгоритм Дейкстры (см. Dial et al. 1979) для нахождения кратчайших путей для подзадачи генерации столбцов. Мы также отмечаем, что, генерируя все кратчайших путей для всех вызовов, мы, вероятно, ограничим количество вызовов подпрограммы ценообразования.

Наша формулировка подзадачи генерации столбцов отличается от формулировки Паркера и Райана тем, что у нас есть третий набор двойственных переменных, соответствующих двойственным ценам на ограничениях сечения.Поскольку наши сокращения основаны на ограничениях пропускной способности, а ограничения пропускной способности связаны с отдельными звеньями, генерируемые сокращения добавляют дополнительную стоимость каждому звену на кратчайшем пути. Поэтому легко дополнить задачу о кратчайшем пути этими двойными ценами.

конкретно, если K - количество порезов, пока π IK - коэффициент для вызова I в срезах K , и π 0 K – правостороннее значение ограничения разреза, то обозначим разрез в следующем виде:

wk:∑i=1,⋯,n∑j∈Si⊂Piδliπikxij≤π0k∀k∈K

где w k будет обозначать двойственную переменную, соответствующую ограничению сечения k .

Тогда подзадача генерации столбцов, связанная с вызовом i , выглядит так:

mindi∑l=1,⋯,m[δlj(Zl*+cl)]+∑k=1Kδljπiklwk*subjectto:j∈Pi

Из этой формулировки задачи о кратчайшем пути мы видим, что веса на каждой дуге /ссылка стала di(zl*+cl)+∑k=1Kπiklwk*. Как будет показано в следующем разделе, разрезы, которые мы генерируем, связаны с пропускной способностью любого звена и основаны на минимальных покрытиях для ограничений пропускной способности (рюкзаков) в задаче. Как только для вызова, использующего эту ссылку, создано сокращение, коэффициент π i k l в крышке включен в стоимость этого звена в задаче о кратчайшем пути.Если решение этой задачи о кратчайшем пути меньше, чем ri−yi*, то текущее lp -решение не является оптимальным, и мы нашли еще один способ добавить к проблеме.

2.3 Генерация разрезов

После того, как lp -релаксация станет двойной допустимой, ограничения секущей плоскости будут сгенерированы и добавлены к lp -релаксации, чтобы лучше определить допустимое целочисленное пространство решений. При включении в процедуру ветвления и отсечения эти дополнительные ограничения сокращают пространство решений для ослабления линейного программирования, не отсекая при этом какую-либо часть пространства решений, содержащую допустимую целочисленную точку.Мы использовали разрезы лица, подобные тем, которые описаны у Hoffman and Padberg (1991) и Crowder et al. (1983). Мы также используем тот факт, что все пути для вызова, использующие одну и ту же ссылку, имеют одинаковый коэффициент в ограничении пропускной способности. Этот факт в сочетании с тем фактом, что можно выбрать только один путь, гарантирует, что коэффициент подъема на каждых таких путей одинаков. Таким образом, можно найти коэффициент подъема для каждых путей данного вызова, выполнив только одну оптимизацию! Этот результат является прямым применением теоремы Джонсона и Падберга (1981), которая обеспечивает сильную процедуру подъема при рассмотрении рюкзаков с непересекающимися множествами специального порядка.

Минимальные покрытия генерируются на основе ограничений пропускной способности канала и набора ограничений специального порядка:

∑i=1,⋯,n∑j∈Siδljdixij≤blforsomelinkconstraintl∑j∈Sixij≤1∀i=1..n

Способом, подобным описанному в Hoffman and Padberg (1991), мы проецируем переменные как на нуле, так и на единице. Затем мы решаем задачу о рюкзаке со специально упорядоченными множествами и только над дробными переменными. Затем мы последовательно возвращаем любые дробные переменные, не входящие в минимальное покрытие, затем все переменные, спроецированные в единицу, и, наконец, те, которые находятся в нуле.

Конкретно рассмотрим некоторое звено l и пусть xij* быть оптимальным решением текущей lp -релаксации. Определите следующие наборы для переменных x i j , которые используют ссылку l : Q1={xij*|xij*=1}, Q0={xij*|xij*=0}, и QF={xij*|0 T i будет набором вызовов, для которых существует хотя бы один xij* дробный. Затем решаем следующую задачу о минимальном покрытии:

ξ=min{∑i∈Ti(1−∑ij∈QFxij*)zi|∑i∈Tidizi>bl−∑i∈Q1di,zi∈{0,1}}

Если ξ < 1, то было найдено верное неравенство, отсекающее xij*.Заметим, что поскольку все пути для этого вызова, которые используют эту ссылку, требуют одинаковой пропускной способности, каждый такой путь имеет одинаковое значение коэффициента в ограничении пропускной способности канала. Таким образом, если любой путь для данного звонка является частью минимального покрытия, то все пути для этого звонка, использующие это звено, также будут частью покрытия с тем же коэффициентом отсечки (покрытия). Таким образом, мы можем выполнить «поднятие» новых путей, использующих определенную ссылку, в существующее ограничение минимального покрытия практически без дополнительных вычислительных усилий.

При генерации разреза мы используем сильное поднятие, чтобы затянуть проблему. Как только минимальное покрытие найдено, мы возвращаем все дробные переменные, которых не было в исходном покрытии, затем возвращаем назад переменные, которые были спроецированы на единицу (подробности см. в Wolsey, 1975), а затем возвращаем переменные в ноль (см. Падберг, 1975). Поскольку эти процедуры подъема являются последовательными , разные порядки подъема будут генерировать разные аспекты. Мы меняем порядок и генерируем до пяти поднятых неравенств минимального покрытия для каждого ограничения пропускной способности канала.

Мы также поднимаем вновь сгенерированные пути (новые столбцы в нашей lp -формулировке) в существующие разрезы, потому что особая структура этой задачи позволяет нам поднимать все путей для вызова одновременно. Мы можем это сделать, поскольку коэффициент в ограничении рюкзака одинаков для всех таких путей. Таким образом, из результата Джонсона и Падберга мы знаем, что все такие переменные будут иметь одинаковый коэффициент подъема. Мы отслеживаем, имеет ли вызов каких-либо путей, которые используют конкретную ссылку.Если когда-нибудь в будущем мы сгенерируем новый путь для вызова, который использует ссылку, ранее не использовавшуюся для этого вызова, мы поднимем этот новый путь до всех разрезов, связанных с этой ссылкой. Таким образом, даже когда размерность задачи увеличивается, мы можем поддерживать разрезы, основанные на структуре граней этого многогранника большей размерности.

2.4 A

lp -Эвристика на основе

Хорошее допустимое решение обеспечивает нижнюю границу проблемы. Паркер и Райан задокументировали ценность хорошей нижней границы на раннем этапе.Когда они снабжали свой алгоритм лучшим известным решением, полученным Андерсоном и др., Проблемы решались быстрее и/или качество решения в большинстве случаев улучшалось. Поэтому мы создали эвристику на основе lp , которую мы вызываем после каждого раунда генерации столбцов и разрезов в верхней части дерева. Внутри дерева мы вызываем эвристику перед выходом из ветки. Раннее установление нижней границы имеет несколько преимуществ. Переменные можно зафиксировать на основе их сниженной стоимости и разрыва между значениями решения lp -optimal и ip -optimal.Правила понимания можно применить раньше, чтобы удалить узлы из дерева перечисления. Кроме того, если пользователю требуется решение в пределах заданного допуска, весь алгоритм может быть остановлен, как только нижняя и верхняя границы отличаются меньше, чем этот допуск.

Эвристика использует текущую lp -релаксацию в процедуре, аналогичной алгоритму «Dive and Fix», описанному Wolsey (1998). Во-первых, эвристика фиксирует переменные, которые в текущем lp -решении равны 0, а переменные - от 1 до 1.Затем он устанавливает все дробные переменные со значениями решения больше 0,7 в 1 или, если ни одно из них не > 0,7, он выбирает дробную переменную, ближайшую к 1, фиксирует ее на 1 и повторно решает линейную программу. Результатом будет один из трех случаев: (1) решение является целочисленным — остановите и сохраните это решение, если оно лучше, чем предыдущее лучшее ip -решение; (2) lp невыполнимо — стоп; или (3) линейная программа выполнима, но решение не является целочисленным — повторите. Повторяем, фиксируя переменные и перерешая, пока набор нефиксированных дробных переменных не станет больше 12.Учитывая, что полностью перебрать 2 12 возможностей довольно быстро, мы перечисляем и выбираем лучшее из всех возможных решений.

В верхней части дерева перед началом ветвления мы проводим тщательный поиск хороших ip -решений, легко доступных из текущего lp -расслабления. Мы начинаем с фиксирования всех переменных от 0 до 0 и всех переменных от 1 до 1. Затем каждая дробная переменная больше 0,5, в свою очередь, устанавливается в 1. Это lp решается, а затем описывается эвристика lp . выше выполняется.Поскольку порядок, в котором дробные переменные установлены равными 1, имеет значение, повторение lp -эвристики для каждой «кандидатной» переменной ( x * ij > 0,5) ищет ip -решений из скорее всего набор переменных.

В наших экспериментах эвристика часто находила оптимальное целочисленное решение в верхней части дерева или в начале ветвящегося дерева. Строгая эвристика в верхней части дерева значительно улучшила качество решения ip в большинстве случаев.Для сравнения мы отправили lp -релаксаций в верхней части дерева в ILOG CPLEX 8.0 (2002) для решения целочисленной программы. CPLEX часто посещал несколько сотен узлов, прежде чем находил оптимальное решение. Кроме того, поскольку мы не зависели от правила ветвления при поиске хороших допустимых решений, мы решили использовать узел, имеющий наилучшее (т.е. наибольшее) значение целевой функции; мы называем это поиском лучшего узла ветвящегося дерева. Оба Парк и соавт. и Барнхарт и др. использовать поиск в глубину, чтобы найти допустимые решения.

2.5 Ветвление

Мы начинаем ветвление, когда не удается найти дополнительных столбцов, улучшающих lp -решение, и мы не можем найти никаких разрезов, отсекающих текущее дробное значение.

Наша стратегия ветвления сильно отличается от тех, что использовались в прошлом. Парк, Канг и Парк использовали традиционное ветвление в своем алгоритме ветвей и границ, где каждый узел в дереве открывает две новые ветви; один принуждает выбранные x i j к 1, а другой к 0.Когда x i j принудительно устанавливается в 1, это очень сильная ветвь, поскольку все остальные пути для этого вызова устанавливаются в ноль. Однако другая сторона ветки, когда x i j установлено в 0, очень слаба. Эта схема разветвления также повлияла на их схему ценообразования. Часто они создавали столбец, который им приходилось отбрасывать, поскольку он нарушал ограничения ветвления.

Как описано ранее, Барнхарт и др. выбрали стратегию ветвления, которая пыталась изменить целевое значение на обеих ветвях текущего узла, а также гарантировала, что их вычисления кратчайшего пути не будут повреждены этой схемой ветвления.Мы используем другое правило ветвления, которое также поддерживает эти положительные характеристики.

Поскольку у нас уже есть хорошая ip -нижняя граница, мы ищем дерево, используя лучший узел, и используем гибридную стратегию ветвления для выбора переменной ветвления и правила. Гибридная стратегия использует одну из трех схем ветвления, одна из которых указывает, что она изменит lp -связку на обеих новых ветвях.

Возможны три правила ветвления:

  1. Выберите вызов i , и с одной стороны, принудительно введите этот вызов в решение, а с другой стороны укажите, что этот вызов не будет маршрутизироваться. ( ∑j∈Sixij=1, с одной стороны; а также ∑j∈Sixij=0 сторона ветки для некоторого вызова i .)

  2. Выберите вызов i и выберите канал с пропускной способностью l на основе его двойной цены. На одной ветке мы указываем, что этот вызов должен использовать ссылку l , а с другой стороны мы указываем, что этот вызов не может использовать ссылку l. ( ∑j∈Si,∂l=1xij=1.с одной стороны ветви, и ∑j∈Si,∂l=1xij=1 на другой стороне для некоторого вызова i и связи l. )

  3. Выберите путь ij для вызова i , который является дробным, и разветвитесь по этому пути. (x ij = 0 на одной стороне ветки и x ij = 1 на другой для некоторого call i и path j .)

  4. .) правила в том порядке, в котором они применяются в алгоритме. Во-первых, мы проверяем, есть ли запас по любому из ограничений маршрутизации. Если это так, мы переходим к вызову с наибольшим провисанием.На одной стороне ветви мы меняем ограничение с неравенства на уравнение, а на другой стороне мы заставляем все пути для этого вызова быть равными нулю. Это заставляет линейную программу решать, следует ли маршрутизировать вызов.

    Когда все ограничения маршрутизации жесткие, мы определяем дробную переменную x i j , ближайшую к 0,5, и ее звено с наибольшей пропускной способностью l . Затем мы указываем, что либо вызов использует эту ссылку, либо нет. Это эквивалентно тому, чтобы сказать Σ J S S 1 I 2, Δ J = L x J J = 0 на одной ветве и Σ J S S 1 I 2, Δ 1 L J x I J 2 = 0 с другой. Таким образом, вместо того, чтобы фиксировать только одну переменную, мы фиксируем набор переменных на каждой стороне ветвящегося дерева. Чтобы предотвратить пути, использующие эту ссылку (на ветке, которая не разрешает такие пути), мы устанавливаем вес ссылки для ссылки l в бесконечность. Точно так же, если мы хотим сгенерировать больше путей, использующих эту ссылку, мы можем сгенерировать кратчайший путь от источника вызова i до ссылки l , а затем кратчайший путь от ссылки l до пункта назначения вызова . я .

    Наконец, если выбранная переменная x i j является единственным путем для вызова i , который использует ссылку l , то мы делаем традиционное ветвление по переменной x i j 7 .

    3. Важность генерации всех оптимальных решений или обеспечение того, что каждая ветвь имеет допустимое решение линейного программирования

    Теперь мы обсудим, почему необходимо генерировать все оптимальных решений задачи линейного программирования в рамках дерева ветвей и границ. Все известные нам правила для процедур генерации столбцов требуют только, чтобы оптимальное решение было получено на вершине ветвящегося дерева и чтобы использовались обычные стратегии проникновения в дерево: понять, если (а) задача линейного программирования неразрешима , (b) задача линейного программирования дает допустимое целочисленное решение, или (c) решение линейного программирования дает ответ хуже (или, по крайней мере, не лучше) лучшего известного целочисленного решения.

    Мы приводим простой пример, показывающий, что использование стандартных правил (тех, которые в настоящее время опубликованы практически во всех) документах по генерации столбцов недостаточно для гарантии оптимальности.В частности, в литературе утверждается, что нужно только показать, что нет столбца, в котором улучшает целевую функцию (т. е. что граница наверху дерева является правильной оценкой). Получив эту границу, можно перейти к дробной переменной, и, если затем получить правильную границу в каждом узле дерева ветвления, когда дерево будет пройдено, будет получено оптимальное решение общей проблемы. Мы представляем простую (семь переменных, три ограничения) задачу разделения множества, которая — при следовании этим стандартным правилам ветвления и понимания — не создает столбцов, необходимых для поиска оптимального решения.Таким образом, стандартный алгоритм заключал бы, что не существует целочисленных допустимых решений задачи, которая имеет кратных оптимальных целочисленных решений.

    Все известные нам правила для процедур генерации столбцов не обсуждают эту проблему. В Барнхарте и соавт. (1998) они упоминают, что начальная ограниченная основная задача должна иметь достижимое lp -релаксацию, чтобы гарантировать, что надлежащая двойная информация передается в задачу ценообразования. Однако они не указывают, что нужно подобное требование по всему дереву.Таким образом, подразумевается, что, получив оптимальное решение линейного программирования на вершине дерева ветвления, можно использовать обычные стратегии проникновения в дерево: понять, если (а) задача линейного программирования неразрешима, (б) задача линейного программирования дает допустимое целочисленное решение, или (c) решение линейного программирования дает ответ хуже (или, по крайней мере, не лучше) лучшего известного целочисленного решения. Заметим, что добавления искусственных переменных, гарантирующих существование допустимого решения ЛП-релаксации на вершине дерева, недостаточно, чтобы не отсечь оптимальные целочисленные решения по всему дереву.Наш пример проиллюстрирует это положение.

    Мы представляем простой пример, который показывает, что нужно быть очень осторожным при понимании правил для подхода с генерацией столбцов. Мы представляем простую (семь переменных, три ограничения) задачу разделения множества, которая показывает, что фаза генерации столбцов должна иметь место в каждом узле ветвящегося дерева, даже когда ослабление линейного программирования дает недопустимое или целочисленное решение.

    3.1 Пример

    Рассмотрим задачу разделения множества с тремя ограничениями и возможными столбцами: (1,0,0), (0,1,0),(0,0,1),(1,0 ,1),(1,1,0),(0,1,1) и (1,1,1).Пусть целевое значение для каждого столбца равно сумме значений в этом столбце. Таким образом, соответствующие значения целевой функции равны (1, 1, 1, 2, 2, 2, 3). Теперь все допустимые решения этой задачи имеют целевое значение = 3. Предположим, что процесс генерации столбцов начинается со следующих трех столбцов: (1,1,0), (1,0,1) и (0,1,1). ). Решение линейной программы для этой задачи с тремя столбцами равно z * = 3 с вектором решения (1/2,1/2,1/2). Поскольку основная задача имеет достижимую lp -релаксацию, в верхней части дерева имеется правильная двойная информация, и нет необходимости генерировать искусственный столбец.Теперь, в процессе создания столбца, мы обнаруживаем, что все остальные столбцы имеют уменьшенную до нуля стоимость, поэтому ни один столбец не может улучшить значение целевой функции. Мы останавливаемся и решаем перейти без создания новых столбцов. Поэтому мы решили зафиксировать одну из этих трех переменных (столбцов) либо на единицу, либо на ноль и «ветвь». На каждой стороне дерева ветвления линейная оптимизация не имеет допустимого решения, и мы заключаем (ошибочно), что задача не имеет допустимых точек! Это явно неверно.

    Эта простая проблема показывает, что в современной литературе не полностью указано, что необходимо для гарантии того, что важные столбцы не будут проигнорированы в схеме генерации столбцов. Вместо того, чтобы использовать «обычные» правила понимания ветвей и границ, нужно пройти фазу генерации столбца в каждом узле. В случае, когда решение линейной программы дает решение целочисленного линейного программирования, можно использовать двойные цены из этого решения, чтобы начать фазу генерации столбца.В этом случае узел будет понят только в том случае, если после генерации столбца решение останется целым. В случае, когда получено невозможное решение, необходимо добавить искусственные переменные, которые составляют допустимое решение (с требуемой высокой стоимостью), чтобы получить двойные цены, необходимые для начала фазы генерации столбцов. Если после этой фазы генерации столбцов решение остается недопустимым, узел следует определить.

    4. Результаты вычислений

    Программное обеспечение, разработанное для проверки этих идей, было написано на C и работает на ПК в среде Linux. CPLEX 8.0 используется для решения lp s симплекс-методом с отключенной предварительной обработкой. Все задачи выполнялись на ПК Dell OptimPlax с операционной системой Red Hat Linux 8.0. ILOG CPLEX 8.0 (2002) Библиотека программных компонентов для Linux PC использовалась для решения всех задач линейного программирования. Мы не использовали ни один из компонентов целочисленного программирования ILOG CPLEX — таким образом, все правила ветвления, секущие плоскости, предварительная обработка и эвристические процедуры были написаны авторами этой статьи на языке C.

    Для наших вычислительных экспериментов мы использовали набор из 10 задач, созданных US West и предоставленных Yuping Qiu. Поскольку этот набор также использовали Лагуна и Гловер, а также Андерсон и др. в их работе над проблемой упаковки пропускной способности мы можем провести сравнение с предыдущей работой. Лагуна и Гловер провели тесты на этом наборе задач со стоимостью ссылки и без нее, в то время как Андерсон и др. показывать результаты только по задачам без стоимости ссылки. IP1-IP10 являются исходными задачами, и мы обозначаем набор без стоимости ссылок буквой z (т.г., ИП1З). Мы также провели тесты по 14 задачам (от DATA1 до DATA14), которые использовались Barnhart et al. (2000) в своей работе. Среди двух наборов тестовых стендов размеры проблем варьируются от 10 до 31 узла, от 15 до 61 ссылки и от 20 до 93 вызовов. Мы представляем изображения каждой из этих задач в Приложении A.

    Мы представляем наши результаты вычислений в трех таблицах ниже. представляет наши результаты. В этой таблице указано количество столбцов и строк, сгенерированных в верхней части дерева, а также релаксация линейного программирования (ZLP) и значение целевой функции целочисленного программирования (ZIP), найденные в верхней части.Мы также указываем наши успехи в решении каждой из этих проблем в столбцах с пометкой «При прекращении».

    показывает преимущества использования эвристики lp для нахождения хорошей целочисленной нижней границы тестовых задач. В верхней части дерева до того, как была реализована строгая эвристика lp , лучшее найденное решение ip находилось между 88,7 % и 100 % решения lp , при этом среднее значение для тестовых наборов составило 95,5 %. . После тщательной эвристики среднее значение было увеличено до 97.5 % (в диапазоне от 94,6 % до 100 %). Для тестовых задач с наибольшим разрывом ( Z IP менее 95 % от Z LP ) выполнение строгой эвристики уменьшило разрыв в среднем на 5,4 процентных пункта. Однако на вершине дерева решение ip , найденное с помощью эвристики, было оптимальным решением в 54 % наборов задач; часто требовалось значительное разветвление, чтобы доказать оптимальность. В четырех случаях мы прервали ветвление на 3000 узлах и не смогли доказать оптимальность.

    Таблица 3

    Качество IP -Solution в верхней части дерева

    9994% 9319.2
    Z LP на вершине дерева Z IP до строгого эвристика Толерантность Z IP После строгих эвристических допуска
    Data1
    6650 6650 6560 98,6% 98,6% 6580 98. 9%
    DATA2 7270 7270 100%
    Data3 28738,1 26170 91,1% 27550 95,9%
    Data4 16826,4 15540 92,4% 16190 96,2%
    данные 5 7790 7790 100%
    DATA6 19053. 8 18920 99,3% 18920 99,3%
    данных7 14109,1 13810 97,9% 13810 97,9%
    data8 8825 8770 994% 8770 994%
    Data9 21486,8 21486. 8 20790 96,8% 96,8% 21360 99.4%
    DATA10 7810 7640 97,8% 7640 97,8%
    Данные11 6110 6110 100%
    DATA12 13290 13040 98,1% 13290 100%
    DATA13 9020 9020 100%
    DATA14 8004. 4 7900 98,7% 7900 98,7%
    IP1Z 7783,6 7530 96,7% 7540 96,9%
    ИП2 2100 2100 100%
    IP3Z 14004. 3 12420 12420 88,7% 13570 96.9%
    IP4Z 3035,7 2770 91,2% 2925 96,4%
    ИП5 2426,2 2295 94,6% 2295 94,6%
    IP6Z 9319. 2 8830 94,8% 8830 8830 94,8%
    IP7Z 11235 11235 10780 95.9% 11010 98,0%
    IP8Z 12810 12280 95,9% 12460 97,3%
    IP9Z 5780 5500 95,2% 5600 96,9% 96,9%
    IP10Z 1000. 9 920 91,9% 91,9% 970 96,9% 96,9%

    , Мы представляем предыдущие известные решения, найденные другими исследователями, и сравнить их с решения, которые мы получили.

    Таблица 4

    Сравнение наиболее известных решений

    Parker и Ryan (начиная с Anderson IP нижняя граница)
    Glover и Laguna Anderson et al. Parker и Ryan (начиная с NO IP нижняя граница) наши
    Data1 6580 6580 6580 6580 6580 6580 6580 6580 6580 6580 6580
    DATA2 7270 7270 7270 7270
    Data3 б 27990 27010 28330 28270
    Data4 16190, 16190, 16210 16210
    данные 5 7790 7790 7790 7790
    DATA6 18950 17810 18970 18970
    ДАННЫЕ7   13840 13760 13880 13880
    data8 8770 8770 8770 8770
    DATA9 21360 21000 21360 21360
    DATA10 7640 7640 7640 7640
    Данные11 6110 6110 6110 6110
    DATA12 б 13330 * а 13230 13330 * 13290
    DATA13 9020 8950 9020 9020
    DATA14 7900 7900 7900 7900
    IP1Z 7540 7540 7540
    ИП2 2100 2100 2100
    IP3Z с 13550 13270 13710
    IP4Z 2955 2885 2955
    ИП5 + гр 2345 2365 2395
    IP6Z 9010 9010 9010
    IP7Z 11000 11160 11160
    IP8Z д 12810 12810 12560
    IP9Z 5780 5780 5780
    IP10 Z   970   970   970

    Диаграммы деревьев вероятностей

    Расчет вероятностей может быть трудным, иногда мы их складываем, иногда умножаем, и часто трудно понять, что делать. .. древовидных диаграмм спешат на помощь!

     

    Вот древовидная диаграмма подбрасывания монеты:

     

    Есть две "ветви" ("Орел" и "Решка")

    • Вероятность каждой ветки написана на ветке
    • Результат пишется в конце ветки

    Мы можем расширить древовидную диаграмму до двух подбрасываний монеты:

    Как рассчитать общие вероятности?

    • Мы умножаем вероятности по ветвям
    • Мы складываем вероятностей вниз по столбцам

    Теперь мы можем видеть такие вещи, как:

    • Вероятность "Голова, Голова" равна 0.5×0,5 = 0,25
    • Все вероятности складываются в 1,0 (что всегда является хорошей проверкой)
    • Вероятность выпадения хотя бы одной решки при двух бросках равна 0,25+0,25+0,25 = 0,75
    • ... и более

     

    Это был простой пример с использованием независимых событий (каждый бросок монеты не зависит от предыдущего броска), но древовидные диаграммы действительно замечательны для определения зависимых событий (где событие зависит от того, что происходит в предыдущем событии), например этот пример:

     

    Пример: игра в футбол

    Вы собираетесь в футбол, и вам нравится быть вратарем, но это зависит от того, кто сегодня тренер:

    • с тренером Сэмом вероятность быть вратарем равна 0. 5
    • с тренером Алексом вероятность быть вратарем равна 0,3

    Сэм тренирует чаще ... примерно в 6 из каждых 10 игр (вероятность 0,6 ).

    Итак, какова вероятность того, что вы сегодня будете вратарем?

     

    Построим древовидную диаграмму. Сначала мы показываем двух возможных тренеров: Сэма или Алекса:

    .

    Вероятность получить Сэма равна 0,6, поэтому вероятность Алекса должна быть равна 0.4 (вместе вероятность равна 1)

    Теперь, если вы получите Сэма, вероятность того, что он будет вратарем, составляет 0,5 (и 0,5 не будет вратарем):

    Если вы получаете Алекса, вероятность того, что вы станете вратарем, равна 0,3 (и 0,7 нет):

    Древовидная диаграмма завершена, теперь давайте посчитаем общие вероятности. Это делается путем умножения каждой вероятности вдоль «ветвей» дерева.

    Вот как это сделать для ветки "Сэм, да":

    (Когда мы берем 0.6 шансов, что Сэм станет тренером, и включая шанс 0,5, что Сэм позволит вам стать вратарем, мы получим шанс 0,3. )

    Но мы еще не закончили! Мы не включили Алекса в качестве тренера:

    Шанс 0,4 для Алекса в качестве тренера, за которым следует шанс 0,3, дает 0,12.

    Теперь добавляем столбец:

    0,3 + 0,12 = 0,42 вероятность быть вратарем сегодня

    (Шанс 42%)

    Чек

    Последний шаг: завершите вычисления и убедитесь, что в сумме получается 1:

    0.3 + 0,3 + 0,12 + 0,28 = 1

    Да, все сходится.

     

    Вы можете увидеть больше вариантов использования древовидных диаграмм на условной вероятности.

    Заключение

    Так вот, если сомневаетесь, нарисуйте древовидную диаграмму, умножьте по ветвям и добавьте столбцы. Убедитесь, что все вероятности в сумме равны 1, и все готово.

     

    Скрытые данные узла/ветви — справка TreeGraph

    TreeGraph 2 позволяет прикреплять данные к узлу или ветви, которые не отображаются непосредственно в документе (в отличие от, например,грамм. текстовые метки) и поэтому называется данные скрытого узла или данные скрытой ветви .

    Чтобы создать скрытые столбцы данных узла или ответвления, вы можете использовать функцию Добавить опорные значения - или Копировать данные узла/ветви . (В учебном пособии «Таксон учитывается как ширина ветвей» также демонстрируется использование данных скрытых узлов.) Дополнительные скрытые столбцы данных узлов/ветвей создаются при импорте горячих комментариев из документа Newick или Nexus, во время импорта phyloXML или когда таблица импортируется.

    Назначение

    Скрытые столбцы данных узла или ветви были включены в TreeGraph 2 по двум основным причинам. Во-первых, вы можете захотеть сохранить данные, которые важны только в процессе разработки дерева, но не должны отображаться в результирующем дереве. Это может, например. быть лабораторными кодами, которые по-прежнему будут доступны для последующего редактирования дерева (например, добавления новых значений поддержки, которые идентифицируются лабораторными кодами), хотя имена конечных узлов уже состоят из реальных имен таксонов.

    Вторые скрытые столбцы данных ветвей или узлов могут использоваться для хранения исходных данных для меток круговых диаграмм или данных, которые используются с функциями Установить значения расстояния по данным узла/ветви или Установить цвета по данным узла/ветви .

    Разница между данными скрытого узла и ветви

    TreeGraph различает аннотации, прикрепленные к узлам или ветвям. Это различие важно, если дерево переукоренено. В этом случае ветки, ранее ведущие к узлу с родительской стороны, теперь могут разветвляться от этого узла к дочерней стороне. Это означает, что данные, прикрепленные к ветке (скрытые данные ветки или метки), изменяют свое положение относительно узла, тогда как данные скрытого узла остаются в том же положении.

    Пример

    Дерево в этом примере дважды содержит одни и те же аннотации, один раз сохраненные в столбце данных скрытого узла и один раз сохраненные в столбце данных скрытой ветви. Это дерево перекоренено на красной ветке.

    Пример дерева после операции повторного рутирования, где значения показаны в виде текстовых меток (данные скрытого узла выделены зеленым, а данные скрытого узла выделены синим цветом). [Скачать XTG] Пример дерева до операции перерутирования. [Скачать XTG]

    Вы можете видеть, что аннотации «1» и «3» в двух столбцах занимают разные позиции после повторного рутирования в зависимости от того, были ли они сохранены как данные скрытого узла или скрытой ветви.Когда вы используете скрытые элементы данных, вы всегда должны спрашивать себя, связаны ли аннотации с ветвями (например, значения начальной загрузки, которые представляют поддержку ветви, разделяющей таксоны дерева на две группы) или с реальными узлами (например, альтернативные имена таксонов для вашего узла). и используйте скрытые данные ветвей или скрытые данные узла соответственно.

    См. также

    Состояние HTTP 500 — Внутренняя ошибка сервера

    Состояние HTTP 500 — Внутренняя ошибка сервера

    Тип Отчет об исключении

    Сообщение Ошибка обработки запроса; вложенным исключением является java. lang.NullPointerException

    Описание Сервер столкнулся с непредвиденной ситуацией, которая не позволила ему выполнить запрос.

    Исключение

     org.springframework.web.util.NestedServletException: Ошибка обработки запроса; вложенным исключением является java.lang.NullPointerException
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:963)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.ява:842)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:827)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    com.rhhz.access.web.ArticleAccessFilter.doFilterInternal(ArticleAccessFilter.java:59)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:106)
    com.rhhz.webclient.LanguageAccessFilter.doFilterInternal(LanguageAccessFilter. java:87)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:106)
    org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:180)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:106)
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal (CharacterEncodingFilter.java:88)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:106)
    com.rhhz.base.util.XssFilter.doFilter(XssFilter.java:46)
     

    Основная причина

     java.lang.NullPointerException
    com.rhhz.webclient.article.action.ArticleController.getArticleByYearIssueFpage(ArticleController.java:409)
    sun.reflect.GeneratedMethodAccessor1083.invoke (неизвестный источник)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:498)
    org.springframework.web.method.support. InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:743)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal (RequestMappingHandlerAdapter.java:672)
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:82)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:933)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:867)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:951)
    орг.springframework. web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:842)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:827)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    com.rhhz.access.web.ArticleAccessFilter.doFilterInternal(ArticleAccessFilter.java:59)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.ява:106)
    com.rhhz.webclient.LanguageAccessFilter.doFilterInternal(LanguageAccessFilter.java:87)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:106)
    org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:180)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:106)
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal (CharacterEncodingFilter. ява:88)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:106)
    com.rhhz.base.util.XssFilter.doFilter(XssFilter.java:46)
     

    Примечание Полная трассировка стека основной причины доступна в журналах сервера.


    Apache Tomcat/7.0.104

    Plastic SCM — пошаговое руководство


    Урок 0. Установка, настройка и концепции

    На этом уроке вы:

    • Установите Plastic SCM для Windows, Linux или Mac OS.
    • Настройка пластикового SCM.
    • Ознакомьтесь с основными концепциями Plastic SCM.

    Скачать Пластик SCM

    1. Посетите страницу загрузки Plastic SCM.
    2. Узнайте больше о установщики , Предыдущие выпуски или Загрузки Labs ссылки для загрузки последний выпуск или любой другой выпуск.
    3. Вы можете:
      • Загрузите 5-дневную бесплатную пробную лицензию.
      • Зарегистрируйтесь, чтобы получить 30-дневную бесплатную пробную лицензию для 5 пользователей (вы получите электронное письмо с загрузкой инструкции).

    Поддерживаемые операционные системы: Microsoft Windows , Linux и Mac OS .


    Установка пластикового модуля SCM

    Выполните шаги по установке Plastic Server и Client для вашей операционной системы.


    Набор из пластика SCM

    1. Для сервера Plastic SCM настроены значения по умолчанию. Но, как администратор, вы можете настроить сервер с нужными параметрами.
    2. При первом открытии клиента Plastic SCM открывается диалоговое окно конфигурации клиента. Это позволяет вам подключиться к серверу Plastic SCM.

    Вы должны настроить:

    • Имя и порт вашего Plastic SCM Server.
    • Учетные данные пользователя .

    Основные понятия Plastic SCM

    Этот раздел поможет вам понять терминологию, используемую для описания концепций в Plastic SCM.Поскольку эти термины будут использоваться в этом руководстве, вы должны понимать их значение.

    Вот несколько понятий, которые вам необходимо знать:

    Хранилище

    Репозиторий обычно содержит проект:

    Рабочее пространство

    Каталог, в котором вы храните свои исходники:

    Предметы

    Содержимое вашего рабочего пространства - файлы и каталоги:

    Филиал

    Место в репозитории, где вы сейчас работаете.Вы можете создавать новые ветки, а затем переключаться на них, сравнивать их содержимое, объединять их, копировать и многое другое:

    Набор изменений

    Индивидуальная регистрация, которую вы сделали:

    Этикетка

    Метка — это имя, присвоенное определенному набору изменений. Он представляет состояние вашего кода в определенной ветке. и момент времени.


    Урок 1. Добавление начального кода

    Добро пожаловать в мир Plastic SCM! В этом уроке используется простой сценарий, который поможет вам настроить проект с использованием Plastic SCM. Этот урок охватывает:

    • Базовая структура репозитория и рабочей области.
    • Как добавить свой код в систему контроля версий, настроить список игнорирования и создать свой первый ярлык.

    Создать репозиторий

    Совет . Используйте стрелки «Предыдущий» (<) и «Следующий» (>), чтобы воспроизвести определенный шаг в Windows, Linux и Mac OS.

    Помните, репозиторий — это «база данных», в которой хранятся изменения.

    1. Щелкните пункт меню Repositories , чтобы отобразить вид репозиториев:
    2. Нажмите кнопку Новый репозиторий :
    3. Введите имя репозитория и укажите сервер в диалоговом окне Новый репозиторий :
    4. Нажмите OK , чтобы создать новый репозиторий.

    Создать рабочее пространство

    Совет . Используйте стрелки «Назад» (<) и «Далее» (>), чтобы воспроизвести определенный шаг в Windows, Linux и Mac OS.

    1. Перейдите к панели действий справа и щелкните пункт меню Workspaces , чтобы отобразить Вид рабочей области :
    2. Нажмите кнопку Создать новую рабочую область :
    3. Выберите репозиторий для работы:

      Plastic автоматически выбирает dokannet в качестве имени рабочей области и пути к рабочей области. хранить данные локально.

      Список рабочих пространств обновляется каждый раз, когда вы создаете новое рабочее пространство.

    4. Дважды щелкните рабочую область dokannet . чтобы открыть список рабочих пространств:

    Добавьте код в рабочее пространство

    Выполните шаги, чтобы добавить код в новую рабочую область. В приведенном ниже примере используется образец кода, загруженный на GitHub.

    • В Windows:

      Перейдите к панели действий справа и щелкните пункт меню Branch Explorer :

      Щелкните правой кнопкой мыши главную ветку > Репликация > Синхронизация с участием Гит :

      В поле URL-адрес репозитория введите следующее: https://github.com/PlasticSCM/доканнет :

      Нажмите кнопку Sync , чтобы загрузить (синхронизировать) код в Рабочее пространство:

      Закройте диалог.

      Выполните шаги в Windows.

    • В Mac OS:

      Откройте терминал и запустите:

      см синхронизации [email protected]:8087 git https://github. com/PlasticSCM/доканнет

      Вы получите аналогичный вывод:

      Выполните шаги в Mac OS.

    • В Linux:

      Откройте терминал и запустите:

      см синхронизации [email protected]:8087 git https://github.com/PlasticSCM/dokannet

      Вы получите аналогичный вывод:

    Перейдите в представление Branch Explorer и обновите страницу.Вы увидите новый набор изменений. Выполните один из этих шагов обновить рабочую область с помощью скачанный код:

    • Щелкните правой кнопкой мыши новый набор изменений щелкните Переключите рабочую область на этот набор изменений .
    • Или выберите ветку и нажмите Переключить рабочую область на эту ветку .

    Обозреватель веток выглядит так:

    Чтобы просмотреть Workspace Explorer в вашей рабочей области, перейдите к Основные действия > Workspace Explorer :

    В вашем рабочем пространстве будет загруженный код:

    Plastic SCM помечает все файлы и каталоги как Controlled . Это означает, что они находятся под пластиковым SCM контроль.


    Создать этикетку

    Branch Explorer отображает историю репозитория в графическом виде.

    На изображении ниже показана ветка и два набора изменений. Текущий набор изменений (обведите дом значок) и исходный набор изменений (сплошной кружок слева), который Plastic SCM создал по умолчанию во время репозитория. творчество.

    Щелкните правой кнопкой мыши текущий набор изменений (обведите значок house ) и выберите Метка . этот набор изменений :

    Введите BL00 в поле имени этикетки и введите комментарий:

    Ваш Branch Explorer выглядит так:

    Метки используются для обозначения стабильных выпусков в вашем проекте.Чтобы «сохранить» безопасный статус, который вы можете восстановить позже, если хотите, щелкните правой кнопкой мыши текущий набор изменений (обведите значок дома ) и нажмите Переключить рабочую область на эту метку :


    Урок 2.

    Изменение кода

    Ваш код постоянно меняется. После развертывания проекта вы будете постоянно изменять файлы.

    Этот урок охватывает управление всеми изменениями в вашем коде под контролем версий и просмотр различия со старыми версиями ваших файлов с помощью Plastic SCM GUI .


    Оформить заказ для редактирования

    Касса в пластике SCM означает:

    • Файл модифицируемый (даже если его не было по умолчанию).
    • Plastic SCM обнаруживает , что файл был изменен (что хорошо для быстрого обнаружение изменений).

    Чтобы оформить заказ, щелкните файл правой кнопкой мыши и выберите пункт меню Checkout :

    Plastic SCM помечает файл как извлечено :


    Настройка списка игнорируемых файлов

    В папке DokanNet в Workspace Explorer есть подкаталоги bin и obj . Эти папки никогда не понадобятся зарегистрировался, поэтому их нужно добавить в список игнорируемых .

    Список игнорируемых содержит правила, которые позволяют Plastic SCM знать, что он должен игнорировать определенные файлы и не отслеживать их.

    Щелкните правой кнопкой мыши папку obj и выберите Добавить в список игнорируемых и выбрать параметр obj :

    Чтобы добавить каждую папку obj во всех ваших рабочих областях в список игнорируемых, установите флажок Применить правила ко всем рабочим пространствам :

    Повторите процесс для бина , и вы увидите что-то вроде этого:

    Вы можете добавить личных элементов в список игнорируемых.Затем будет создан файл ignore.conf . быть создан, содержащий игнорируемые элементы.

    Если вы также добавите файл ignore. conf в список игнорируемых, он перестанет отображаться в Ожидающие изменения просмотр.


    Изменить файл

    Запустите проверку и откройте файл, который хотите отредактировать.

    В примере сценария, чтобы изменить файл DokanNet.cs , запустите проверку и откройте файл, чтобы отредактировать его.

    Изменена строка 119 и заменена строка DOKAN на ДОКАН-NET строка.


    Проверьте разницу в представлении Ожидающие изменения

    Перейдите к представлению Ожидающие изменения , чтобы просмотреть файлы, которые вы уже изменили:

    В представлении Ожидающие изменения перечислены файлы, которые вы ранее извлекли. Обратите внимание на измененный файл — это файл, который среда IDE изменила при открытии.

    Нажмите кнопку Show diffs , чтобы увидеть строку, которую вы изменили:

    Кнопка Показать различия позволяет просматривать различий в каждом файле прежде чем зарегистрировать их.


    Зарегистрироваться

    Когда вы внесли изменения в файл, вы можете выполнить регистрацию, чтобы сохранить их. Введите сначала прокомментируйте, затем нажмите кнопку Checkin :


    Показать разницу

    Перейдите к Branch Explorer , чтобы увидеть текущее состояние репозитория .Ты увидеть что-то вроде этого:

    В ветке теперь три набора изменений:

    • Начальный набор изменений
    • Набор изменений с меткой Baseline00 над ним
    • Текущий набор изменений (значок домика)

    Щелкните правой кнопкой мыши текущий набор изменений.

    • В Windows

      Нажмите Diff набор изменений :

    • В Mac OS

      Нажмите Diff с предыдущим :

    • В Linux
    • Нажмите Diff с предыдущим :

    Вы увидите 90 417 сравнения 90 418 предыдущего контента с текущим. в новом окне.В этом окне есть три раздела информации:

    • Top — Информация о наборе изменений и его авторе, а также комментарий, который вы написали. проверить в
    • Средний - Список сравниваемых предметов
    • Нижний - Различия между текущим набором изменений ( номер 2 или cs:2 ) и предыдущий ( номер 1 или cs:1 ) набор изменений

    Урок 3.

    Перемещение, удаление и переименование

    На этом уроке вы сможете перемещать, переименовывать и удалять файлы.

    В этом уроке вы узнаете, как Plastic SCM выполняет эти общие операции с файлами и как он возвращается к предыдущему состоянию. ревизия.


    Переместить файл

    Например, чтобы переместить файл license.txt , щелкните правой кнопкой мыши файл license.txt и выберите Cut :

    Чтобы переместить файл license.txt в каталог \sample , вставьте файл license.txt в этот каталог с помощью команды Paste пункт контекстного меню.

    После выполнения этой операции ваш Workspace Explorer выглядит так:

    Представление Ожидающие изменения показывает, что вы уже изменили:

    Рисунок выше поясняет действия, которые вы только что выполнили: источник и пункт назначения перемещения, а также статус, измененный на переехал .

    Теперь вы можете проверить в изменение. Не забудьте добавить комментарий, чтобы задокументировать изменение.Для например, файл license.txt перемещен в каталог «образец» .


    Удалить файл

    Следующая операция — удаление файла, находящегося под управлением Plastic SCM.

    Щелкните правой кнопкой мыши файл readme.txt и выберите меню Удалить . вариант:

    В диалоговом окне подтверждения удаления выберите, хотите ли вы сохранить файл на диске или нет:

    • В Windows:

      Если вы хотите удалить файл из системы контроля версий, но оставить его на своем диске (например, файл, который вы добавили по ошибке), выберите параметр Не удалять элементы на диске .

      Для этого сценария выберите параметр Не удалять элементы на диске .

    • В Mac OS:

      Если вы хотите удалить файл из системы контроля версий, но оставить его на своем диске (например, файл, который вы добавили по ошибке), выберите параметр Удалить элементы из системы контроля версий .

      Для этого сценария выберите параметр Удалить элементы из системы управления версиями .

    • В Linux:

      Если вы хотите удалить файл из системы контроля версий, но оставить его на своем диске (например, файл, который вы добавили по ошибке), выберите параметр Удалить элементы из системы контроля версий .

      Для этого сценария выберите параметр Удалить элементы из системы управления версиями .

    Вкладка Ожидающие изменения выглядит так:

    Обратите внимание, что файл указан дважды:

    • Один экземпляр Добавлен - Статус Частный (файл сохранен на диске, как и в предыдущем шаге).
    • Второй экземпляр — Удалено — Состояние Удалено (удалено из версии контроль).

    В Workspace Explorer обратите внимание, что статус удаленного файла Рядовой . Это означает, что файл не находится под системой контроля версий больше, и он отображается без значка настройки и без записи в столбцах «Тип», «Ветвь» или «Набор изменений»:

    Если вы переключитесь на представление Ожидающие изменения , вы сможете Проверить удаленные пункт.Не забудьте ввести комментарий, кратко объясняющий изменение:


    Переименовать файл

    Переименование файла эквивалентно перемещению файла. Но переименовать операция представляет собой перемещение внутри одного и того же каталога.

    Щелкните правой кнопкой мыши файл, который вы хотите переименовать, и выберите Rename :

    Введите новое имя:

    Представление Ожидающие изменения теперь выглядит следующим образом:

    Обратите внимание, что статус файла изменился на Moved . Это потому, что Plastic SCM знает, что файл имеет номер . переименован в .

    Теперь вы можете зарегистрировать перемещенный элемент. Не забудьте ввести комментарий, кратко поясняющий изменение:


    Отменить изменения

    В приведенном ниже сценарии вы узнаете, как отменить изменения, которые вы внесли в свое рабочее пространство.

    Начните с изменения файла DokanNet\DokanNet.cs . Оформить файл и добавить следующие правки:

    Сохраните изменения и перейдите к представлению Ожидающие изменения , чтобы просмотреть измененный файл.Нажмите кнопку Показать различия , чтобы сравнить содержимое предыдущего с текущий один. Дифференциалы выглядят так:

    Вы можете отменить изменения, внесенные в файл.

    • В Windows

      Выполните любое из следующих действий:

      • В представлении Text diff перейдите к любому изменению, которое вы хотите отменить, и нажмите «Отменить». Щелкните Сохранить .
      • Или нажмите кнопку Отменить изменения на панели инструментов, чтобы отменить все изменения при каждом выбранный элемент. Подтвердить отмену изменений :
    • В Mac OS

      Нажмите кнопку Отменить изменения на панели инструментов, чтобы отменить все изменения при каждом изменении. выбранный элемент. Подтвердить отмену изменений :

    • В Linux

      Нажмите кнопку Undo на панели инструментов, чтобы отменить все изменения для каждого выбранного пункт. Подтвердить отмену изменений :


    Урок 4 — Прозрачный SCM

    В этом уроке вы узнаете все о функции Transparent Version Control .

    Функция Transparent избавляет от беспокойства, связанного с перемещением или переименованием файлов и их потерей. синхронизация с контролем версий. С Plastic SCM вы можете работать со своими файлами, изменять их, перемещать вокруг, создать новые или удалить их.

    Когда вы будете готовы зарегистрировать свои изменения, перейдите к представлению Ожидающие изменения . Пластиковый SCM обнаруживает все действий и записывает их в репозиторий одним щелчком мыши.


    Знакомство с прозрачным SCM

    Предыдущий урок следовал рабочему процессу checkout-edit-checkin . Используя этот рабочий процесс, вы должны сообщить Plastic SCM, что вы будете выполнять определенную операцию над файлом.

    В этих сценариях вы будете использовать очень расширенный рабочий процесс редактирования-регистрации , популярен в большинстве систем управления версиями с открытым исходным кодом (SVN, CVS, Git и многих других).

    В Plastic SCM это называется прозрачным рабочим режимом , потому что Plastic SCM может обнаруживать все, что вы сделали в своем рабочем пространстве, и предлагать это для проверки.


    Найти изменения

    Откройте DokanNet\DokanNet.cs и DokanNet\DokanOperation.кс файлы в инструменте IDE, но не извлекайте их.

    Измените файл DokanNet\DokanNet.cs , удалив строку 149 :

    Измените файл DokanNet\DokanOperation.cs , раскомментировав диапазон из строки . 43 до строка 49 :

    Перейдите к представлению Ожидающие изменения , чтобы проверить, что вы изменили. Ожидание изменения вид обнаруживает файлы, которые вы изменили.Поскольку вы не проверили их перед редактированием, статус значение Изменено вместо Извлечено :

    • В Windows
    • В Mac OS
    • В Linux

    Проверьте измененные файлы. Не забудьте ввести комментарий.


    Разрешить Plastic SCM обнаружить перемещенный файл

    Следующий шаг — переместить файл в рабочую область и позволить Plastic SCM обнаружить Это.

    Переместите файл lic.txt из папки sample\ в корневая папка. Выполните этот шаг вне Plastic SCM, например, с помощью проводника Windows. Обратите внимание, что эта операция включает операции перемещения и переименования .

    Откройте представление Pending Changes . Plastic SCM обнаруживает перемещенный файл , и статус Перемещено локально . Обратите внимание Подобие столбца .В этом столбце показан процент сходства между файлами. Пластик SCM пытается чтобы соответствовать переехал файлы с личными файлами, чтобы определить, является ли это одним и тем же файлом. Только локально перемещенных элементов имеют значение в этот столбец:

    Значение сходства равно 100%, что означает, что это один и тот же файл.


    Переместить измененный файл

    Вы можете решить переместить ранее измененный файл .

    Измените файл DokanNet\DokanNet.cs , добавив новую строку. Но не проверяй:

    Откройте проводник Windows и переместите измененный файл DokanNet\DokanNet.cs в каталог DokanNet\Properties . Вот как выглядит представление Ожидающие изменения после перемещения файла:

    Статус установлен на перемещен локально . Сходство установлено на 99,49%, так как вы изменили файл перед его перемещением. Пластик SCM может определить его как тот же файл , потому что содержимое совпало на 99%.


    Удалить файл

    Открытые окна Explorer и удалите файл DokanNet\Proxy.cs . После удаления файла вид Ожидающие изменения выглядит так:

    Обратите внимание, что столбец статуса в настоящее время имеет значение Удалено. локально , что означает, что контролируемый файл был удален из рабочей области за пределами Plastic SCM.


    Обнаружение перемещенных каталогов

    Вы можете перемещать каталоги в Plastic SCM.Например, откройте проводник Windows и переместите папку RegistryFS из каталога sample в каталог DokanNet :

    Обратите внимание, что Статус настроен на Перемещено локально , а Сходство столбец содержит 100%.

    Plastic SCM идентифицирует и отображает только перемещенный каталог, а не все файлы внутри как перемещены.


    Регистрация

    На этом этапе вы можете Проверить все изменения.Не забудьте добавить комментарий, когда будете регистрироваться все файлов (удалены и перемещены) для документирования изменения:


    Проверить различия

    Перейдите к Branch Explorer , чтобы увидеть текущее состояние репозитория:

    Щелкните правой кнопкой мыши текущий набор изменений.

    • В Windows

      Нажмите кнопку Diff changeset :

    • В Mac OS

      Нажмите кнопку Diff с предыдущим :

    • В Linux

      Нажмите кнопку Diff с предыдущим :

    Теперь вы видите сравнение контента предыдущего с текущий один.А вот диф выглядит так:

    Есть несколько различий, и вы можете показать каждое из них, нажав на стрелку.


    Урок 5. Работа с ветками

    В этом уроке вы узнаете все о ветвях. Филиалы предлагают способ изолировать разные направления развития друг от друга, часто называемые Parallel Development .


    Зачем мне создавать ветки?

    Ветвление — это концепция, очень важная для системы управления версиями.

    Базовое понятие ветви — это линия развития, которая существует независимо от другой линии . и имеет общую историю. Ветвь всегда начинает свою жизнь как копия чего-то и движется оттуда дальше. создание собственной истории.

    Ветвление — очень эффективный процесс. Вы можете легко работать с ветками функций или пойти еще дальше и используйте ветки задач, модель, которую рекомендует Plastic SCM.

    Plastic SCM реализует целенаправленную разработку очень эффективно с помощью известного ветвей на шаблон задачи .Чтобы узнать больше, щелкните следующие ссылки:


    Создать «базовый план»

    Проще говоря, базовый уровень — это метка .

    Это моментальный снимок вашего кода в данный момент времени. Это знак, тег , который вы можно использовать для восстановления этого статуса позже, если вам нужно.

    Чтобы создать метку, откройте левую панель действий Другие действия > Ярлыки :

    Ваше представление Labels выглядит следующим образом:

    • В Windows

      Нажмите кнопку Создать новую метку .

    • В Mac OS

      Щелкните правой кнопкой мыши вид Labels и выберите Create new label :

      В Linux

      Щелкните правой кнопкой мыши вид Labels и выберите Create new label :

    В диалоговом окне Новая метка введите имя и комментарий для новой метки. В этом примере используется Baseline01 для имени:

    Обратите внимание на поле Changeset to label .Он сообщает Plastic SCM, где применяется этикетка. То значение по умолчанию — это текущий набор изменений , загруженный в рабочую область. В этом примере в набор изменений имеет номер 7 .

    Теперь у вас есть еще одна метка, чтобы отметить стабильную версию вашего проекта. После создания ярлыка ваш Филиал Проводник выглядит так:


    Создать филиал

    Перейдите к обозревателю веток , чтобы создать свою первую ветку.

    Текущий набор изменений в вашей рабочей области представлен значком домика. Щелкните правой кнопкой мыши этот набор изменений и выберите Создать ветку из этого набора изменений :

    В диалоговом окне Новая ветвь введите scm001 для название ветки и комментарий:

    Команда Plastic SCM работает с филиалом по модели задачи . Это означает, что каждая задача разработки является новой ветвью.

    Установите флажок Переключить рабочую область на эту ветвь , чтобы начать разработку в новом Филиал .


    Внести изменения в ветку

    Перейдите к Branch Explorer и проверьте текущее состояние:

    Выберите новую ветвь и нажмите кнопку Options на панели инструментов. Справа вы будете смотрите свойства ветки:

    Теперь нужно внести некоторые изменения в ветку!

    Перейдите к Workspace Explorer , чтобы добавить файл ознакомительных сведений .файл txt . Щелкните файл правой кнопкой мыши и выберите Добавить в систему управления версиями :

    Теперь файл добавлен и проверен:

    Перейдите к представлению Ожидающие изменения и зарегистрируйте изменение, чтобы подтвердить добавленный файл:

    Теперь измените файл readme. txt , добавив строку в начале. Первый, извлеките файл и дважды щелкните его, чтобы открыть, или щелкните файл правой кнопкой мыши и выберите Open .

    Перейдите к представлению Ожидающие изменения и проверьте, что вы изменили:

    Теперь вы можете ввести комментарий и зарегистрировать изменение.

    Перейдите к обозревателю веток , чтобы проверить нашу новую ветку. Теперь у вас есть два набора изменений в ветке scm001 : первый созданный вами при добавлении файла readme.txt , а второй — с последним изменением:

    Теперь добавим новое изменение в ветку .Перейдите в рабочее пространство . Проводник , извлеките файл lic.txt и откройте его. Чтобы изменить его, удалите строки 10 и 11 :

    Вернитесь к Branch Explorer . Вы можете увидеть дом с контуром пунктирной окружности. Это значок для проверенных наборов изменений :

    Дом с контуром пунктирной окружности означает:

    • Это будет следующий набор изменений .
    • Ожидается проверка в .

    Перейдите к представлению Ожидающие изменения , чтобы увидеть, что вы изменили. Затем добавьте комментарий и запустите Checkin :

    Если вы вернетесь к обозревателю Branch Explorer , вы сможете увидеть текущее состояние текущего scm001 филиал :

    В приведенном выше примере показано несколько возвратов в ветке scm001 .

    Если вы часто заходите, вам будет легко понять все изменения.Это означает, что вы самодокументирующий код .

    Вы можете прочитать больше об этом на самодокументированном развитие через сообщение в блоге.

    Урок 6. Объединение изменений

    Урок 5 посвящен работе над основной веткой, созданию новой ветки, переход на них и внесение изменений.

    Этот урок покажет вам, как работает процесс слияния в Plastic SCM.


    Создать ветку из набора изменений

    Перейдите к Branch Explorer и проверьте текущее состояние.Чтобы вернуться к основной ветке, щелкните правой кнопкой мыши главную ветвь и выберите Переключить рабочую область на эту ветку :

    Вы видите что-то вроде этого:

    Выполните шаги до , создайте еще одну ветку из последнего набора изменений на основной ветвь:

    • Щелкните правой кнопкой мыши текущий набор изменений и выберите Создать ветку из этого набора изменений .
    • Напишите имя ветки , например: scm002 (для task002 ).
    • Щелкните OK .

    Ваш Branch Explorer выглядит следующим образом:

    Перейдите к обозревателю рабочего пространства .

    Проверьте файл lic.txt и измените его, добавив новую строку вверху.

    в Ожидающие изменения вид, вы можете увидеть эту модификацию:

    Добавьте комментарий (например, Добавлена ​​новая строка ) и запустите Checkin .

    Вернитесь к Branch Explorer , чтобы увидеть текущее состояние вашей рабочей области:


    Первое слияние

    Щелкните правой кнопкой мыши текущую ветвь и выберите рабочее пространство Переключиться на эту ветвь , чтобы вернуться к основная ветвь :

    Branch Explorer перед слиянием будет выглядеть так:

    Щелкните правой кнопкой мыши ветку scm001 и выберите Слияние из этой ветки :

    Слияние из этой ветки выглядит так:

    Обратите внимание на столбцы:

    • Изменения только в источнике - Изменения только в источнике участник . Это значит, что эти изменения только в ветке scm001 .
    • Добавлено в источник - Элемент добавлен в ветку scm001 .

    Нажмите кнопку Обработать все слияния в верхней части панели инструментов, чтобы обработать слияние:

    Ваше первое слияние завершено! Конфликтов слияния нет. И основная ветвь содержит изменения, внесенные в ветку scm001 .

    Перейдите к Branch Explorer , чтобы увидеть текущее состояние рабочей области:

    На рисунке выше есть две новые вещи, на которые стоит обратить внимание:

    • Извлеченный набор изменений - Набор изменений с «домом» и контуром пунктирного круга.
    • Ожидающая ссылка на слияние — пунктирная зеленая линия со стрелкой на конце.

    Это связано с тем, что вы создали слияние из ветки scm001 в основную ветку , поэтому новый набор изменений будет создан после действия регистрации.

    Перейдите к Ожидающие изменения Посмотреть:

    Обратите внимание:

    • Филиал, в котором вы собираетесь зарегистрироваться, является основным филиалом .
    • Статус Заменено (вы изменили существующий файл) и Скопировано (новый) (вы добавил новый файл).
    • Оба изменения взяты из набора изменений 10 .
    • Напоминает, что есть ожидающее слияние для регистрации.

    Теперь вы можете зарегистрировать изменения после слияния. Не забудьте добавить комментарий, поясняющий изменение. Например: Слияние ветки scm001 с основной веткой .


    Объединить обратно в «основной»

    Перейдите к Branch Explorer , чтобы увидеть текущее состояние репозитория:

    Сделайте слияние из ветки scm002 в основную ветку . Щелкните правой кнопкой мыши scm002 ветка и выберите Merge from this branch :

    Объединить из ветки вид:

    Обратите внимание на два столбца с пометкой:

    • Примечания — Показывает краткое описание конфликта для каждого элемента.В этом случае есть изменения как исходного, так и целевого вкладчиков.
    • Участник — отображает действия, которые будут выполняться, когда Обработать все кнопка слияния нажата.

    Если вы хотите копнуть глубже, чтобы узнать больше о слиянии, нажмите кнопку Объяснить слияние в вверху на панели инструментов. Представление объяснения слияния выглядит следующим образом:

    Обратите внимание на 3 важных термина:

    • Источник (src) — Показывает ревизию, из которой выполняется слияние (в данном случае scm002 ).
    • Base — начальная версия (в данном случае Baseline01 ).
    • Место назначения (dst) — Показывает, что у вас есть прямо сейчас в вашей рабочей области. Будет новый набор изменений создан на основной ветке . Он будет содержать результат слияния.

    Вернитесь к представлению Слияние из ветви и нажмите Обработать все слияния .

    Branch Explorer выглядит так:

    Существует новый набор изменений, ожидающий проверки, поэтому перейдите к представлению Ожидающие изменения и проверьте измененный файл.

    В представлении Ожидающие изменения перечислены файлы, которые вы ранее объединили. Нажмите на Кнопка «Показать различия» , чтобы увидеть строку, которую вы изменили:

    Вы можете проверить разницу перед операцией слияния возврата, чтобы убедиться, что код был правильно объединил .

    Введите комментарий (например, Объединить из ветки scm002 в основную ветку ) и нажмите кнопку Зарегистрировать .


    Базовый тест

    Перейдите к Branch Explorer , чтобы создать новый базовый план.

    • Щелкните правой кнопкой мыши текущий набор изменений и выберите Пометить этот набор изменений .
    • В диалоговом окне Новая метка введите Baseline02 в качестве имени метки и введите комментарий:

    Ваш Branch Explorer выглядит следующим образом:

    Базовая линия — это линия, формирующая основу для любого построения, сравнения или расчеты. Целью базового уровня является снижение уязвимости проекта до неконтролируемой. изменение путем фиксации и формализации изменения путем контроля критических точек в процессе разработки цикл.

    Baseline02 — это место, где вы могли бы составить модульные тесты . которые могут помочь вам обеспечить качество кода.


    Трехстороннее слияние: конфликты вручную

    В этом разделе вы измените один и тот же раздел кода в том же файле.

    Вы создадите две новые ветки.

    Перейдите к Branch Explorer и щелкните правой кнопкой мыши текущий набор изменений. Затем выберите Создать ветку из этого набора изменений и введите scm003 в качестве имени ветки и добавить комментарий:

    Или щелкните правой кнопкой мыши главную ветвь и выберите команду Создать. дочерняя ветвь .

    Проверьте файл DokanNet\Properties\DokanNet.cs и измените его, добавив новые строки в линия 117 .

    Перейдите к представлению Ожидающие изменения и проверьте, что вы изменили:

    Зарегистрировать файл. Не забудьте прокомментировать (например, Добавление новых условий в файл DokanNet.cs для документирования изменения.

    Перейдите к Branch Explorer , чтобы увидеть текущее состояние репозитория:

    Щелкните правой кнопкой мыши главную ветвь и выберите Переключить рабочую область на эту ветку , чтобы вернуться в основную ветку :

    Чтобы создать вторую новую ветку из метки Baseline02 , перейдите к ветке . Проводник , щелкните правой кнопкой мыши текущий набор изменений и выберите Создать ветку из этого набор изменений .Введите scm004 в качестве имени филиала и добавьте комментарий:

    Проверьте тот же файл DokanNet\Properties\DokanNet.cs , добавив новые строки также по линии 117 .

    Перейдите к представлению Ожидающие изменения и проверьте, что вы изменили:

    Не забудьте прокомментировать (например, Добавление новых строк в файл DokanNet. cs ) и Проверить файл.

    Перейдите к Branch Explorer , чтобы увидеть текущее состояние рабочей области:

    Вернитесь к основной ветви , щелкнув правой кнопкой мыши главную ветвь и выбрав Переключить рабочую область на эту ветку .Текущее состояние репозиторий выглядит так:

    Помните, что вы изменили точно такой же участок кода в том же файле. Это действие делает слияние намного более сложный.

    Чтобы выполнить это слияние, сначала вы выполните слияние из ветки scm003 в ветку основной филиал. Затем вы объедините ветку scm004 с основной . ветвь.

    Начните с перехода к Branch Explorer .Затем щелкните правой кнопкой мыши ветку scm003 . и нажмите Объединить из этой ветки .

    То Слияние из ветки выглядит следующим образом:

    В настоящее время изменения есть только в исходном контрибьюторе. Нажмите Обработать все объединяет , и слияние будет выполняться автоматически.

    Перейдите к Branch Explorer , чтобы проверить текущее состояние рабочей области:

    Появилась новая ожидающая ссылка на слияние, поэтому перейдите к представлению Ожидающие изменения .Не забудьте написать комментарий (например, Объединение из scm003 в основной ) перед запуском Checkin :

    Перейдите к Branch Explorer , чтобы увидеть текущее состояние рабочей области:

    Филиал scm003 объединен.

    Выполните те же действия, чтобы объединить ветку scm004 .

    • В обозревателе веток щелкните правой кнопкой мыши ветку scm004 и выберите Объединить из этой ветки .
    • В слиянии из ветвь , нажмите Обработать все слияния .

    Окно Mergetool :

    Вы можете узнать больше о том, как работает слияние, обратившись к этим четырем важным терминам:

    • Исходный код (src) — показывает ревизию, из которой выполняется слияние.
    • База — Начальная версия.
    • Место назначения (dst) — Показывает, что у вас сейчас есть на рабочем месте.
    • Результат — Отображает, как будет выглядеть ревизия в вашей рабочей области после завершения слияния.

    Каждый из них имеет свой цвет, чтобы помочь вам лучше понять процесс слияния.

    Вы можете увидеть код, добавленный в ветке scm003 (источник), и scm004 . отделение (назначение). Внизу вы увидите окончательный результат с обоими участниками.

    Если вы согласны с пунктом назначения , нажмите Отменить выбор источника :

    Просмотрев файл, нажмите кнопку Сохранить и выйти в верхней части панели инструментов.

    Перейдите к Branch Explorer , чтобы увидеть текущее состояние рабочей области:

    В представлении Ожидающие изменения вы можете проверить файл, который вы изменили. Не забудьте добавить комментарий перед Checkin :

    Вы можете сравнить два выполненных вами слияния:

    • Если только один участник изменил код, это автоматический конфликт .
    • Если оба участника изменили код, инструмент слияния спросит вас, какой файл сохранить.

    Трехстороннее слияние и двухстороннее слияние

    Последний сценарий следовал за трехсторонним слиянием . Это включало изменение одного и того же файла в том же месте в двух разных ветках. Результирующий файл — это файл, созданный после внесения изменений. объединив и , вы решили, что будет окончательным кодом .

    Двустороннее слияние является более простым, поскольку не учитывает базовый файл (общий предок) для расчета слияния.

    Вернитесь к файлу DokanNet\DokanOperations.cs и выполните пару простых действий. изменения. Затем объедините код с помощью инструмента двустороннего слияния. Посмотрите результаты на рисунке ниже:

    • Двухстороннее слияние не знает, добавили ли вы строку или удалили ее, поэтому оно не может автоматически решить, как разрешить этот конфликт.
    • Однако инструмент трехстороннего слияния автоматически разрешит конфликт, поскольку ему известно, каким был исходный файл. на основе (базового файла).Вот почему Plastic SCM использует только инструмент трехстороннего слияния.

    Узнайте больше о слиянии, прочитав следующую документацию:


    Последнее обновление

    18 мая 2018 г.
  5. Мы внесли существенное изменение: «Представление элементов» исчезло, и теперь мы называем его «Обозреватель рабочего пространства».