Тест устойчивости алгоритма Гейла-Шепли - PullRequest
0 голосов
/ 23 февраля 2020

Я новичок в python кодировании и пытаюсь выяснить, как проверить стабильность алгоритма Гейла-Шепли. Я понимаю, что для создания стабильного соединения это означает, что нет ситуации, когда 2 человека предпочитают друг друга своему назначенному партнеру.

Данные предпочтений участников следующие:

preference = [["boy1",1,3,2,4], ["boy2",1,2,4,3],["boy3",1,2,3,4],["boy4",2,3,1,4],["girl1",2,1,3,4],["girl2",4,3,2,1],["girl3",1,2,3,4],["girl4",3,4,2,1]]

Например, для предпочтения [0] рейтинг boy1 для girl1 равен 1, girl2 равен 3, girl3 равен 2, girl 4 означает 4. Это означает, что список идет следующим образом: ["boy1", (рейтинг girl1), (рейтинг girl2), (рейтинг girl3), (рейтинг girl 4)].

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

solution1 = [["boy1","girl1"],["boy2","girl3"],["boy3","girl2"],["boy4","girl4"]

Я пытаюсь найти функцию, которая выдает истину, если решение стабильно, и ложь, если решение нестабильно, учитывая предпочтение, решение и количество пар.

Я пытался использовать pandas и numpy, но я продолжаю зацикливаться на многих циклах for, а также проблемах с индексацией и проблемах с индексированием, поскольку я не очень знаком с любым из них python библиотек. Я сейчас пытаюсь go вернуться к основанию c и посмотреть, возможно ли это сделать. Однако, когда я это делаю, я понимаю, что продолжаю использовать циклы for, и это будет не так эффективно. Ниже приведен мой неполный код, пожалуйста, посоветуйте, что мне следует сделать, чтобы повысить эффективность этого неполного кода - и, если возможно, выполнить мой текущий неполный код после его завершения. Пожалуйста, предложите любые библиотеки python, которые я тоже могу использовать, любые предложения очень приветствуются!

def teststability(n, preference, solution):
  for i in solution[i]:
    fpo = solution[i][1][1]
    for j in preference[j]:
      if solution[i][0] == preference[j][0]:
        rank = preference[j][fpo]
        if rank == 1:
          continue
        else:
          for k in pref[j][k]:
            if pref[j][k] < rank:
              lst.append("girl"+str(k))
            else:
              continue

1 Ответ

0 голосов
/ 23 февраля 2020

Вы не Pandas или Numpy для этого, поскольку это классическая c алгоритми c проблема SAT, а не одна из данных. (Если вам нужно применить данный алгоритм решения к большому массиву пар, тогда Pandas может быть полезным.)

Алгоритм реализован в пакете QuantEcon/MatchingMarkets .

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

female_prefs = {1: [2, 1, 3, 4], 2: [4, 3, 2, 1], 3: [1, 2, 3, 4], 4: [3, 4, 2, 1]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...