2014-11-10 2 views
1

Я тестирую различные модели/алгоритмы TSP. Сейчас я использую полную матрицу смежности, заполненную случайными значениями от 1 до 100, которая представляет собой полный направленный граф.C++ генерирует случайные графики, подходящие для TSP

Я ищу более строгий подход, который позволил бы мне попробовать различные виды случайных графов, таких как Erdos-Renyi, сети малого мира и сети, свободные от масштаба.

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

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

BTW Я думал об использовании библиотеки Boost Graph, но я не знаком с ней, и, возможно, есть что-то более подходящее. Предложения по альтернативам приветствуются, но не следует считать основной сферой этого вопроса.

Мне не нужен решатель TSP, мне нужно что-то, чтобы помочь в создании приемлемых проблем.

Спасибо.

ответ

0

Вы можете попробовать монотонный серый код, a.k.a кривую гильберта. Это может помочь найти путь гамильтониана: http://en.m.wikipedia.org/wiki/Gray_code.

+0

Интересно. Хотите добавить некоторые детали? В Википедии есть лишь небольшой абзац, рассказывающий об гамильтоновском пути. – Agostino

+0

@Agostino: Почему ваш график направлен? – Bytemain

+0

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

0

Я ищу более строгий подход, который позволил бы мне попробовать различные виды случайных графов,

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

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

+0

Боюсь, это не вариант. Я ищу бесплатные решения, чистые C++ (или, по крайней мере, вызываемые из него). Mine - это учебный проект, поэтому использование решателя TSP приведет к поражению цели. – Agostino

+0

@Agostino Я думал, вы пытаетесь протестировать разные алгоритмы, чтобы не генерировать случайные экземпляры. Кажется, я ошибся. – Xline

+0

Я генерирую случайные экземпляры для проверки алгоритмов, и я хочу сделать это на C++ (мой собственный код + библиотеки + решатели). – Agostino

Смежные вопросы