본문 바로가기

코딩 강좌35

#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.
파이썬 정렬 팁 data = [ {'name': '김철수', 'age': 8}, {'name': '홍길동', 'age': 17}, {'name': '고길동', 'age': 43} ] # age 순으로 오름차순 sorted(data, key=lambda item: item['age']) # name 순으로 내림차순 sorted(data, key=lambda item: item['name'], reverse=True) ※ data 자체가 바뀌지는 않고, sorted 함수를 실행하면 정렬된 목록을 리턴해줍니다. 2022. 6. 24.
MapLibre - #7 나만의 맞춤 지도 앱스토어 주소 MapLibre 강좌를 통해 설명드렸던 기능들을 모아 구글 앱 스토어에 올렸습니다. (*2월21일 현재 구글 앱스토어에 등록 심사중입니다) 브이월드에서 받은 API키를 입력하면 아래 영상처럼 오픈 스트리트맵 배경지도 위에 연속지적도를 겹처서 볼 수 있습니다. 한번 입력한 API키는 앱 환경설정(shared preferences)에 저장되어 매번 입력할 필요 없게 했습니다. 만약 유효기간이 지나면 브이월드 API 키 수정 메뉴로 갱신 가능합니다. 연속지적도 뿐 아니라 다양한 정보를 불러서 응용할 수 있습니다. * WMS명, WFS명, 스타일명은 소문자만 가능합니다. 구분한글명칭WMS명WFS명스타일명비고 경계 광역시도 lt_c_adsido lt_c_adsido_info lt_c_adsido 2D lt_c_a.. 2022. 2. 21.