重み付きマッチングで最適解

  • 重み付きマッチングとは→こちら参照
  • RでHungarian methodは、パッケージ clueの関数 solve_LSAP()
  • 昨日の記事のlpSolveパッケージのlp.assign()関数も同じことだけれど、このハンガリー法はこの教科書のp271に「現在知られている最速」とあるだけに、すごく、速い!

組合せ最適化-理論とアルゴリズム

組合せ最適化-理論とアルゴリズム

  • 昔、駆け足で読んで、ほとんど痕跡しか覚えていないけれど・・・こちら
  • 輪読会しているところのPDFこれ
k<-100
library(lpSolve)
library(clue)
# 適当に行列を作ってやる
M<-matrix(abs(rnorm(k^2)),k,k)
# "max":最大になるように割り付け
out2<-lp.assign(M,direction="max")
out<-as.vector(solve_LSAP(M,maximum=TRUE))
# 結果を出力
print(out)
out2
# ここから、「最大値」を計算してみる
VAL2<-sum(out2$solution*M)
VAL<-sum(diag(M[1:k,out]))
# print(out)と同じ値
print(VAL)
print(VAL2)