조합 최적화로 녹화 프로그램 결정
작업 할당 문제
여러 작업을 여러 리소스에 할당하는 것을 고려합니다. 특정 작업 쌍은 동일한 리소스에 할당할 수 없습니다. 선택한 직업의 가치의 합을 극대화합니다.
구체적인 예를 든다.
사고방식
다음의 5 프로그램을 생각합니다. 녹화 기기는 3대 있다고 합니다.
이름
시작 시간
종료 시간
가치
A
9:00
9:30
1
B
9:30
10:00
1
C
9:00
10:00
1
D
9:00
9:30
1
E
9:30
10:00
1
프로그램을 노드, 동시 녹화 금지를 엣지로 하는 그래프를 생각합니다.
이 그래프를 기기 마다 복제한 새로운 그래프를 생각해, 같은 프로그램간에도 엣지를 작성합니다.
이 그래프상에서 최대 안정 집합 문제를 풀면 "동시 녹화 금지를 충족하고 같은 프로그램을 하나까지의 기기에서만 녹화한다"해를 구할 수 있으므로 어느 기기에서 어느 프로그램을 녹화하면 좋은지 알 수 있습니다.
파이썬으로 풀어보세요
python3import networkx as nx
from itertools import combinations
from more_itertools import grouper
from ortoolpy import maximum_stable_set, Autodict
g = nx.Graph()
dc = Autodict()
for i in 'ABCDE':
for j in'123':
g.add_node(dc[i+j], weight=1)
for i, j in grouper(2, 'ACADBCBECDCE'):
for k in '123':
g.add_edge(dc[i+k], dc[j+k])
for i in 'ABCDE':
for j, k in combinations('123', 2):
g.add_edge(dc[i+j], dc[i+k])
print([dc.keys[i] for i in maximum_stable_set(g)[1]])
>>>
['A1', 'B3', 'C2', 'D3', 'E1']
기기 1에서 A와 E, 기기 2에서 C, 기기 3에서 B와 D를 녹화하면 좋은 것을 알 수 있습니다.
이상
Reference
이 문제에 관하여(조합 최적화로 녹화 프로그램 결정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/SaitoTsutomu/items/61fa098a0085dfb7a640
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
python3
import networkx as nx
from itertools import combinations
from more_itertools import grouper
from ortoolpy import maximum_stable_set, Autodict
g = nx.Graph()
dc = Autodict()
for i in 'ABCDE':
for j in'123':
g.add_node(dc[i+j], weight=1)
for i, j in grouper(2, 'ACADBCBECDCE'):
for k in '123':
g.add_edge(dc[i+k], dc[j+k])
for i in 'ABCDE':
for j, k in combinations('123', 2):
g.add_edge(dc[i+j], dc[i+k])
print([dc.keys[i] for i in maximum_stable_set(g)[1]])
>>>
['A1', 'B3', 'C2', 'D3', 'E1']
기기 1에서 A와 E, 기기 2에서 C, 기기 3에서 B와 D를 녹화하면 좋은 것을 알 수 있습니다.
이상
Reference
이 문제에 관하여(조합 최적화로 녹화 프로그램 결정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/SaitoTsutomu/items/61fa098a0085dfb7a640텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)