Как вычислить оптимальные пути для коммивояжера bitonic тур?

В Python оператор power записывается как ** (не ^).

^ является оператором XOR .

Так что, вероятно, вам следует заменить ^ на **.

Редактировать после вашего комментария

Я полагаю, что вы хотите, чтобы исходные числа читались как «истинные» числа (целые или с плавающей точкой), а не в их текстовом представлении.

Из вашего вопроса я также знаю, что вы хотите изменить, например. 2^0 до промежуточного значения 2**0 и сохранить его также в виде числа (в данном случае 1).

Мне не удалось подготовить исходный файл .xlsx (несмотря на мои усилия, мой Юпитер продолжал жаловаться, что он был не в кодировке UTF-8 ), поэтому я подготовил пример с чтением из файла .csv .

Итак, начнем с исходного файла .csv :

C1;C2;C3;C4;C5;C6;C7;C8
geeky;0;1,9921875;0;2^0;0;T_U8;0
xyz;0;3,2044218;1;3^4;3;T_X2;4

Первое, на что нужно обратить внимание, это то, что разделителем полей является ; (не запятая). Это необходимо, потому что числа с плавающей точкой имеют запятую (вместо точки) между целой и дробной частью.

C5 столбец содержит 2^0 и 3^4, которые должны быть преобразованы в промежуточную форму 2**0 и 3**4 и, наконец, в 1 и 81.

Чтобы выполнить приведенное выше преобразование, я написал функцию:

arrowToPower = lambda x : eval(x.replace('^', '**'))

Затем чтение DataFrame может быть выполнено следующим образом:

df = pd.read_csv('Input.csv', sep=';', decimal=',', converters={'C5': arrowToPower})

Следует отметить следующие моменты: [ 1166]

  • Input.csv - это имя входного файла.
  • sep=';' определяет разделитель столбцов.
  • decimal=',' указывает, что разделяет целую и дробную части.
  • converters={'C5': arrowToPower} назначает функцию преобразователя для столбца C5.

Когда вы печатаете df, результат будет:

      C1  C2        C3  C4  C5  C6    C7  C8
0  geeky   0  1.992188   0   1   0  T_U8   0
1    xyz   0  3.204422   1  81   3  T_X2   4

Чтобы прочитать из файла Excel , вы должны изменить read_csv на read_excel измените имя файла и удалите параметр sep.

Если у вас есть больше столбцов с ^ вместо **, назначьте преобразователь также для этих столбцов.

Правка, касающаяся чтения файла Excel

Наконец мне удалось написать такой файл Excel, который мог быть прочитан read_excel.

enter image description here

Затем я выполнил:

df2 = pd.read_excel('Input.xlsx', converters={'C5': arrowToPower})

и получил правильный результат.

Значения, считанные в столбец C5, были 1 и 81, поэтому определенно был вызван конвертер arrowToPower.

Обратите внимание, что первая строка файла Excel содержит имена столбцов, а следующие строки - фактические данные. В случае файлов Excel запятая как разделитель между десятичной и дробной частями является только проблемой представления, и под капотом read_excel читает внутренний контент. Вот почему параметр decimal здесь не нужен.

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

14
задан David Bejar 18 October 2012 в 06:48
поделиться

1 ответ

В построителе интерфейса свяжите класс tableview с вашим пользовательским табличным представлением в представлении инспектора идентичности

ключевые понятия в решении динамического программирования:

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

Существенным свойством битонического тура является то, что вертикальная линия в системе координат пересекает сторону замкнутого многоугольника не более двух раз. Итак, что такое битонический тур ровно по двум точкам? Ясно, что любые две точки образуют (вырожденный) битонный тур. Три точки имеют два битонических обхода («по часовой стрелке» и «против часовой стрелки»).

Теперь, как вы можете предварительно вычислить различные меньшие битонные туры и объединить их, пока вы не включите все точки и все еще не получите битонический тур?


Хорошо, вы на правильном пути с вашим обновлением. Но теперь, в решении динамического программирования, то, что вы делаете, работаете это снизу вверх : предварительно вычисляет и запоминает (не «запоминает») оптимальные подзадачи.

3
ответ дан 1 December 2019 в 13:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: