프로젝트

일반

사용자정보

Wiki » 이력 » 버전 7

버전 6 (백흠경, 2020/03/13 18:50) → 버전 7/11 (백흠경, 2020/03/13 19:10)

h1. Wiki

# 아래 그림에서 주어진 조건으로 grouping하여 두번째와 같은 결과를 만드는 문제입니다.
## [1,2,3,5], [4,11,7,8,9], [6,10] 각각 같은 조건을 가지고 있음
{{drawio(SMAP-Page-1.xml)}}
## 조건 : Package, Fluid, Material이 같고 연결된 아이템(물리적으로 연결되어 있으나 노즐이나 OPC에서는 끊김)
## 기능 : 아이템에서 연결된 아이템들은 찾을 수 있음(1번에 연결된 아이템은 2,3임)
{{drawio(SMAP-Page-2.xml)}}

-----

h2. 알고리즘

# [그림 1]을 다음과 같이 간략화 시킬수 있습니다.
{{drawio(SMAP-Page-3.xml)}}
# all = [1,2,3,4,5,6,7,8,9,10,11,12]
# 조건에 맞게 grouping합니다.
<pre>
packages = []
while all:
item = all.pop()
package = group(item)
packages.append(package)
package.consume(all)
</pre>
# group 클래스
<pre>
class group:
def __init__(self, item):
self.members = [item]

def consume(self, all):
"""group을 구성한다"""
stack = self.members
while stack:
item = stack.pop()
connected_items = self.get_connected_items(item, all)
for connected in connected_items:
if connected is Equipment or connected is OPC:
all.remove(connected)
continue

if self.members[0].package == connected.package and self.members[0].fluid == connected.fluid and self.members[0].material == connected.material:
stack.append(connected)
self.members.append(connected)
all.remove(connected)

def get_connected_items(self, item, all) -> list:
"""item에 연결된 아이템들 중 all에 있는 것을 리턴한다"""
return [connected for connected in item.connecteds if connected in all]
</pre>
클립보드 이미지 추가 (최대 크기: 500 MB)