파이썬 합이 10이 되게 하는 세 수치
조회수 753회
파이썬 코드 작성중인데 어떻게 접근해야할지 계속 고민하는데 여러분들의 고견 부탁드립니다. 방향성이라도 제시해주시면 감사하겠습니다.
코드 목표는 설정값 set_point를 맞추는 것입니다.
set_point = 10
unit1 = 6, unit2 = 3, unit3 = 5
unit1은 0~100% 제어 가능 : 0~6 사이 실수 가능
unit2는 0n/off만 가능(0% 혹은 100%) : 0 또는 3만 가능
unit3은 10%씩 제어 가능 : 0, 0.5, 1, ..., 5
예를들어, unit1=4.5 (75%출력), unit2=3 (100% 출력), unit3=3.5 (70% 출력) 총합이 set_point인 10이 되도록하는게 목표입니다.
이는 수 많은 경우의 수 중 하나입니다.
근데 경우의 수도 많고 어떻게 접근해야할지 고민입니다. decision tree를 사용해야할지... 각각의 유닛에 가능한 옵션을 다 구하고 조합하는 것도 생각해봤는데 unit 수가 점점 늘어나면 돌리는데 시간이 오래걸릴 거 같습니다.
부탁드립니다.
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
2 답변
-
모든 경우의 수를 구하는 것도 그리 어렵지 않습니다.
for unit2 in [ 0, 3 ]: for u3 in range(0, 51, 5): unit3 = u3/10 unit1 = 10 - unit2 - unit3 set_point = unit1 + unit2 + unit3 print( unit1, '|', unit2, '|', unit3, '||', set_point)
10.0 | 0 | 0.0 || 10.0 9.5 | 0 | 0.5 || 10.0 9.0 | 0 | 1.0 || 10.0 8.5 | 0 | 1.5 || 10.0 8.0 | 0 | 2.0 || 10.0 7.5 | 0 | 2.5 || 10.0 7.0 | 0 | 3.0 || 10.0 6.5 | 0 | 3.5 || 10.0 6.0 | 0 | 4.0 || 10.0 5.5 | 0 | 4.5 || 10.0 5.0 | 0 | 5.0 || 10.0 7.0 | 3 | 0.0 || 10.0 6.5 | 3 | 0.5 || 10.0 6.0 | 3 | 1.0 || 10.0 5.5 | 3 | 1.5 || 10.0 5.0 | 3 | 2.0 || 10.0 4.5 | 3 | 2.5 || 10.0 4.0 | 3 | 3.0 || 10.0 3.5 | 3 | 3.5 || 10.0 3.0 | 3 | 4.0 || 10.0 2.5 | 3 | 4.5 || 10.0 2.0 | 3 | 5.0 || 10.0
- 답변감사합니다. 많은 도움되었습니다. 한 가지 더 질문드리자면, 지금은 unit 수가 3개로 한정되어 있지만, unit 수가 정해지지 않았을 때 이를 일반화해서 코드를 만들 수 있을까요? unit 수가 100개가 되었을 때 set_point 값을 맞추기 위한 일반화된 형식이요 알 수 없는 사용자 2020.12.2 21:31
- @꼬우 : 변수 100개라면, 모든 경우의 수를 다 확인하는데 어려움이 있을 수 있겠네요. 초보님의 답변처럼 진짜 랜덤하게 변수들을 뽑아서, f(u1, u2, u3, ... , u100) 의 결과값을 확인해보고, 가장 최적화되는 포인터 몇군데를 선별해서 주변을 전체탐색하는 방식으로 찾는 게 어떨까 싶네요. nowp 2020.12.2 21:41
-
정확히 어떤걸 원하시는건지 모르겠지만 set_point 값이 고정되어있다면 대충 아래 방법을 적용하면 되지 않을까 싶어서 적어봅니다.
import random set_point = 10 unit1 = random.uniform(1,2,3,4,5,6) unit2 = random.uniform(0,3) unit3 = set_point - unit1 - unit2
댓글 입력