본문 바로가기

코딩 강좌/OrTools5

#3-2 OrTools로 bin packing 문제 해결(CP-SAT) 이전 글에 이어서 제약조건을 설정하고 최적화를 실행하는 부분을 설명하겠습니다. # 제약조건 for i in range(n): model.Add(xb1[i] == x[i] + b[i]*W) model.Add(xb2[i] == xb1[i] + w[i]) model.AddNoOverlap2D(xival,yival) model.AddMaxEquality(z,[b[i] for i in range(n)]) # 목적함수 model.Minimize(z) # 모델 최적화 solver = cp_model.CpSolver() # 로그 남기기 solver.parameters.log_search_progress = True # search worker 개수 지정 - 멀티스레드 #solver.parameters.num_searc.. 2022. 11. 22.
#3-1 OrTools로 bin packing 문제 해결(CP-SAT) 2D bin packing(상자 채우기) 문제는 2차원 평면에 사각형의 객체를 적절히 채우는 문제입니다. 이 문제를 푸는 방법은 상당히 여러가지가 있는 것 같습니다. 여기말고 '티바이트' 라는 분의 블로그에 상당히 자세한 알고리즘 풀이가 있으니, 궁금하신 분들은 참고하시면 좋을 것 같습니다. 이 글에서는 OrTools의 CP-SAT 솔버를 통해 문제를 해결하는 방법을 보여드립니다. 아래 소스의 대부분은 "Yet Another Math Programming Consultant"라는 분의 블로그의 글을 참고했습니다. 우선 결과부터 보여드리면 아래와 같습니다. 너비 68, 높이 60 영역에 50개에 서로 크기가 같거나 다른 상자를 채운 모습입니다. 소스는 크게 4부분으로 나누어 집니다. 데이터 정의 제약 조건.. 2022. 11. 22.
#2 OrTools로 n-Queens 솔루션 결과 출력 이전 글에서 orTools로 n-Queens 솔루션을 찾는 방법을 설명했습니다. 이번 글에서는 지난 번 글에 이어지는 글로 솔루션의 결과를 출력하는 방법을 소개합니다. ### 모델 해결 solver = cp_model.CpSolver() ### 모델 다이어그램 출력 printer = DiagramPrinter(queens) ### 모델 다이어그램 출력 status = solver.SearchForAllSolutions(model, printer) print() print('찾은 솔루션 개수 : %i' % printer.SolutionCount()) print("걸린 시간: ", solver.WallTime(), "ms") 지난 번 소스 맨 마지막 부분을 보면 solver를 통해 솔루션을 찾기에서 Diag.. 2022. 11. 21.
#1 OrTools로 n-Queens 해답 찾기 N-Queens 문제는 가로, 세로 칸의 수가 동일한 체스판 모든 행에 서로 공격할 수 없는 퀸을 배치하는 문제입니다. 이 문제에 대한 자세한 정보는 위키백과에서 확인 할 수 있습니다. 아래는 OrTools 최적화 도구를 이용해 N-Queens 문제를 푸는 python 소스입니다. import sys # CP-SAT 솔버 from ortools.sat.python import cp_model def main(board_size): model = cp_model.CpModel() # 변수 생성 # 배열의 인덱스는 열(column), 값은 행(Row) queens = [model.NewIntVar(0, board_size - 1, 'x%i' % i) for i in range(board_size)] # 제약.. 2022. 11. 18.
#0 OrTools란 무엇인가? Google Optimization Tools로 구글에서 만들어 무료(open-source)로 배포하고 있는 최적화 도구입니다. 최적화 도구란 여러가지 선택 가능한 문제를 수학적 모델로 정의하고 가장 나은 선택을 제시해 주는 프로그램이라고 할 수 있다. 예를 자주 드는 N-Queen 문제가 있다. 크기가 N x N 인 체스판 위에 퀸 N 개가 서로를 공격 할 수 없게 놓는 경우의 수를 구하는 문제 체스에서 퀸은 대각선과 가로, 세로로 공격할 수 있다. 그러면 N x N 크기의 체스판에서 공격할 수 없게 놓을 수 있는 퀸 배치 경우의 수는 몇개인가? N-Queens 문제는 최적화라기보다 가능한 모든 경우의 수를 구하는 문제이지만, 최대값, 최소값을 구하는 문제도 Or-Tools를 통해 구할 수 있다. Or.. 2022. 11. 14.