슬롯 Studio는 기기를 포함하는 OpenID Connect 제공업체만 지원합니다. 승인 흐름.
와 함께슬롯 엔진 UI, 슬롯 MIRO 데스크톱그리고슬롯 스튜디오, 슬롯는 이미 엔진에 세 가지 인터페이스를 제공합니다. 그러나 만일 자신의 애플리케이션을 엔진과 함께 사용하고 싶다면 쉽게 그렇게 할 수 있습니다. 는 사용오픈API모든 종류의 응용프로그램이 다음에 연결되도록 허용합니다. RESTful API를 통한 슬롯. 맞춤 클라이언트에 대해 자세히 알아보기여기.
슬롯 엔진은 사용 가능한 대부분의 기능을 구현하는 웹 사용자 인터페이스와 함께 제공됩니다. 특징. 이 인터페이스를 통해 사용자, 모델 및 데이터를 관리할 수 있을 뿐만 아니라 새 작업을 제출하고 결과를 다운로드하세요. 귀하의 상태에 따라역할("슬롯자", "초대자" 또는 "관리자") UI의 다양한 요소가 표시됩니다.
UI는 6개의 보기로 구성됩니다. (이 보기를 보려면 최소 슬롯자 역할은 다음과 같습니다. 괄호 안에 추가됨):
또한 왼쪽 상단에 있는 슬롯자 이름을 클릭하면 옵션에 접근할 수 있습니다. 코너. 여기서 찾을 수 있습니다.설정, 인증 토큰 생성그리고변경 비밀번호. 또한 귀하의 할당량이 여기에 표시됩니다.
에서설정대화상자에서 기본 테이블인 할당량 단위를 정의할 수 있습니다. 페이지당 길이를 확인하고 인스턴스가 하나 이상 존재하는 경우 기본 인스턴스를 설정합니다. 에 대한 당신. 할당량 단위에는 두 가지 옵션이 있으며 기본값은멀티, 이는 할당량이 다음과 같이 표현됨을 의미합니다.승수 * 초. 는 두 번째 옵션은멀스, 이 경우 모든 할당량 값은 다음으로 나뉩니다. 3600 (승수 * 시간). 이 외에도일반설정에 따라 다음과 같은 옵션도 있습니다. 특정 이벤트가 발생할 때 알림을 받도록 푸시 알림 활성화(예: 작업이 완료되면. 이 기능을 슬롯하려면 관리자가 다음을 수행해야 합니다. 활성화했습니다.웹훅기능.
그작업보기에는 제출한 모든 작업과 공유된 모든 작업이 나열됩니다. 그룹을 통해 여러분과 함께합니다(슬롯자 그룹). 또한 관리자는 모든 슬롯자가 제출한 모든 작업을 확인하고 초대자 초대받은 사람이 제출한 모든 작업을 볼 수 있습니다. 원하는 열을 클릭하여 제출물을 정렬할 수 있습니다. 이것으로부터 보기, 작업과 상호 작용할 수도 있습니다(자세한 내용 보기, 취소 작업을 실행하거나 결과를 다운로드하고) 새 항목을 제출합니다.
그네임스페이스모두 목록 보기 네임스페이스 및 모든모델각각에 등록됨 네임스페이스. 특정 네임스페이스에 등록된 모델을 보려면 이 네임스페이스와 모델을 나열하는 테이블이 업데이트됩니다. 마찬가지로작업보기에서 원하는 항목을 클릭하면 테이블을 정렬할 수 있습니다. 칼럼. 이 보기에서 네임스페이스를 추가하거나 제거하고 등록할 수 있습니다. 새로운 모델.
당신이 열면슬롯자슬롯자로 보기, 여기서는 자신만 볼 수 있습니다. 당신이 관리자인 경우 시스템에 등록된 모든 슬롯자를 볼 수 있습니다. 만약 당신이 초대자입니다. 귀하 또는 귀하의 초대 대상자 중 한 명이 초대한 슬롯자만 해당됩니다. 표시됩니다. 테이블에는 역할, 초대자 및 생성 날짜가 표시됩니다. 슬롯자. 또한 여기에서 슬롯자를 삭제하거나 새 초대 코드를 생성할 수 있습니다. 초대자는 동일하거나 그 이하의 사람만 초대할 수 있습니다. 그 자체로 특권. 슬롯자 역할 및 권한에 대해 자세히 알아보려면여기를 클릭하세요. 슬롯자 역할, 권한, 할당량을 편집하고 슬롯량을 보려면 초대자 초대 대상자에 액세스하려면 밑줄 친 슬롯자 이름을 클릭하세요.슬롯자 페이지선택된 슬롯자의.
그슬롯자 페이지에 대한 모든 정보와 설정이 포함되어 있습니다. 선택된 슬롯자. 이 페이지는 슬롯자 이름이 언급된 곳이면 어디든 접속할 수 있습니다(해당하는 경우). 해당 슬롯자의 페이지를 볼 수 있는 권한이 있습니다). 귀하의 상황에 따라 권한에 따라 페이지에 포함된 탭 수가 달라집니다. 귀하가 슬롯자인 경우 귀하에게는 자신의 페이지를 볼 수 있는 권한만 있으며 귀하의 페이지를 찾을 수 있습니다.슬롯법여기. 초대자로서 귀하는 다음을 볼 수 있습니다.슬롯자 페이지모두의 귀하가 초대한 슬롯자와 그들이 초대한 슬롯자. 그들에게는 선택권이 있습니다 비밀번호, 라이선스, 인스턴스, 할당량, ID 공급자를 편집하려면 권한을 확인하고 슬롯량을 확인하세요. 당신은 당신 자신의 슬롯법을 찾을 것입니다 그리고 초대받은 나무. 관리자로서 귀하는 관리자와 동일한 옵션을 찾을 수 있습니다. 초대자이지만 모든 기존 슬롯자에게 해당됩니다.
다음을 선택하는 경우슬롯법탭에서 해당 슬롯법에 대한 자세한 보기를 확인하세요. 슬롯자가 표시됩니다. 여기서는 슬롯자의 남은 할당량과 해당 슬롯자가 생성한 작업 개요 먼저 관심 있는 기간을 선택하고 관리자이거나 초대자, 데이터에 초대받은 사람을 포함할지 여부. 그만큼대시보드개인에 대한 더 자세한 보기를 허용합니다. 직업. 테이블은 기본적으로 슬롯자 이름별로 그룹화됩니다. 가능하다 이를 그룹화 없음으로 변경하거나 인스턴스별 또는 풀 레이블별로 변경합니다. 만약에 선택한 기간에 슬롯자/인스턴스/풀 라벨이 2개 이상 존재합니다. 데이터는 파이 다이어그램으로도 표시됩니다. 만일인스턴스 풀있습니다 슬롯되면 두 번째 테이블에 이러한 풀의 유휴 시간이 표시됩니다. 두 번째 탭 아래타임라인그래픽 시각화는 다음 중 하나를 보여줍니다. 승수로 가중치가 부여된 작업 또는 병렬 작업 수 시간이 지남에 따라.
웹훅추가/업데이트 가능 그리고 다음을 통해 제거되었습니다.웹훅보기. 이 보기는 다음 슬롯자에게 표시되지 않을 수 있습니다. 귀하가 슬롯자이거나 초대자이고 관리자가 활성화하지 않은 경우 이 기능은 당신을 위한 것입니다. 관리자는 다음을 활성화/비활성화할 수도 있습니다. 이 보기의 웹훅 기능입니다.
모델 실행 결과를 정리하고 데이터베이스의 공간을 확보하려면, 슬롯하다정리보기. 파일을 하나씩 제거하거나 정리할 수 있습니다 "관리 실행" 버튼을 클릭하여 여러 파일을 한 번에 실행하세요. 이 "관리" 대화 상자를 슬롯하면 다음보다 많이 생성된 모든 파일을 제거할 수 있습니다.x일 전 및/또는 삭제된 슬롯자가 생성한 파일 시스템.
그관리보기를 슬롯하여 다음을 추가/업데이트할 수 있습니다.슬롯 엔진 라이센스도 포함 시스템 전체 슬롯 라이선스로. 여기서도 가능합니다 관리할 관리자ID 제공업체그리고인스턴스. 또한 관리자가 비밀번호 정책을 설정할 수도 있습니다. Engine을 ID 공급업체로 슬롯하는 모든 슬롯자에 대해.
배포 도구 슬롯슬롯 MIRO기존 슬롯 모델을 사용하여 전환할 수 있습니다. 몇 줄의 추가 코드를 사용하여 배포 가능한 웹 애플리케이션으로 만들 수 있습니다. 미로 풍부한 그래픽 출력 형식, 시나리오 관리 등 다양한 세트가 함께 제공됩니다. 더. 쉽고 자동화된 방법을 찾는 사람들을 위해 설계되었습니다. 다른 사람이 슬롯 모델을 사용할 수 있습니다.
슬롯 스튜디오슬롯와의 몇 가지 기본 상호작용 기능이 내장되어 있습니다. 엔진. 버전 1.4.2부터 Studio를 사용하여 슬롯 작업을 수행할 수 있습니다. 엔진. 기능 세트는 지속적으로 확장되고 있습니다.
슬롯 작업을 해결하기 위해 엔진을 사용하려면, 선택슬롯 엔진 실행퀵에서 툴바에 액세스하거나 항목을 통해슬롯메인 메뉴에서.
나타나는 대화상자에서 먼저 슬롯으로 인증해야 합니다. 서버:
슬롯 Studio는 기기를 포함하는 OpenID Connect 제공업체만 지원합니다. 승인 흐름.
다음을 사용하여 슬롯에 로그인할 때ID 제공업체그러한 Okta 또는 Microsoft Azure Active Directory로 다음을 수행해야 합니다. 슬롯 Studio에 로그인하려면 JSON 웹 토큰을 사용하세요. JSON 웹 토큰은 다음과 같습니다. 로그인하여 생성됨슬롯 UI그리고 다음으로 이동 중인증 토큰 생성인터페이스. 당신은 당신을 클릭하여 거기에 도착 왼쪽 상단에 있는 슬롯자 이름을 클릭하고인증 토큰 생성:
다음을 클릭한 후로그인버튼을 누르면 다른 양식이 나타날 것입니다. 모델을 해석할 네임스페이스 선택, GDX 파일 생성 여부 실행이 끝나면 전체 슬롯 데이터베이스 중 어느 것인스턴스모델을 실행하려면 (후자는 슬롯 엔진 SaaS를 사용하는 경우에만 해당).
클릭으로확인작업이 제출되었습니다. 모델이 컴파일되었음을 참고하세요. 로컬로 실행 단계만 슬롯 엔진에서 수행됩니다. 결과 기본 이름(예: 기본 파일 이름)으로 명명된 하위 폴더에 기록됩니다. 모델. 로그 출력의 링크는 해당 로컬 링크로 대체됩니다.
엔진을 통해 처리된 슬롯 작업은 Linux 운영 체제에서 실행됩니다. 따라서 UNIX 경로 구분 기호('/')가 사용됩니다. 이는 다음과 관련이 있습니다. 슬롯 모델의 기존 경로 및 명령의 경로 작업을 제출할 때 줄. 따라서 UNIX가 경로 구분 기호는 항상 사용됩니다!
슬롯 엔진은 다음 사양을 따르는 REST API를 제공합니다.OpenAPI 버전 2.0. 이 사양은 언어에 구애받지 않는 표준 인터페이스를 정의합니다. 인간과 컴퓨터 모두가 쉽게 발견하고 소프트웨어의 능력을 이해한다. 슬롯 엔진은 클라이언트를 통해 액세스할 수 있습니다. 다양한 프로그래밍 언어로 된 라이브러리를 통해 다양한 개발 환경.
슬롯 API에 접근하는 방법은 다양합니다. Python으로 작업하는 경우 간단히 작업을 제출하려면 다음 중 하나를 사용할 수 있습니다.슬롯 Python API또는 이미 GAMSPy를 슬롯하고 있는 경우 슬롯할 수 있습니다.슬롯 클라이언트. 그러나 더 많은 액세스 권한을 원할 경우 Engine의 엔드포인트이거나 Python과 다른 언어를 사용하는 경우에는 다음을 수행해야 합니다. HTTP 요청을 직접 작성하세요. Python을 사용하여 작은 예를 살펴보겠습니다. 여기서 슬롯에서 사용자 목록을 생성합니다. 당신이 사용하는 코드는 다른 언어에서의 요구 사항은 Python 예제와 매우 유사합니다.
당신이 Python으로 작업하고 있고 주요 목표가 다음에 작업을 제출하는 것이라면 슬롯, 다음을 사용할 수 있습니다.슬롯 Python API. 이 접근 방식을 슬롯하면 개별 HTTP 요청을 수동으로 처리할 필요가 없습니다.
GAMSPy를 슬롯하는 경우 다음을 직접 선택할 수 있습니다.슬롯 클라이언트백엔드로.
먼저 설치를 확인하세요감사피[슬롯]에 작업 중인 환경:
다음으로 슬롯에 제출하려는 모델을 정의해야 합니다. 당신은 할 수 있습니다 파일에서 직접 읽거나, 모델이 작은 경우 정의하세요. Python 코드 내의 문자열로. 이 예에서는 간단한 교통 모델.
GAMS_MODEL = """
세트
i '통조림 식물' / 시애틀, 샌디에이고 /
j 'markets' / 뉴욕, 시카고, 토피카 /;
매개변수
a(i) '경우에 따라 식물 i의 용량'
/시애틀 350
샌디에이고 600 /
b(j) '경우에 따라 시장 j의 수요'
/ 뉴욕 325
시카고 300
토피카 275 /;
테이블 d(i,j) '거리(천 마일)'
뉴욕 시카고 토피카
시애틀 2.5 1.7 1.8
샌디에고 2.5 1.8 1.4;
스칼라 f '1,000마일당 케이스당 운임(달러)' / 90 /;
매개변수 c(i,j) '케이스당 운송 비용(단위: 수천 달러)';
c(i,j) = f*d(i,j)/1000;
변수
x(i,j) '케이스의 선적 수량'
z '총 운송 비용(천 달러)';
양수 변수 x;
방정식
비용 '목적 함수 정의'
Supply(i) '공장 i의 공급 제한을 준수합니다.'
수요(j) '시장 j의 수요를 충족';
비용.. z =e= sum((i,j), c(i,j)*x(i,j));
공급(i).. sum(j, x(i,j)) =l= a(i);
수요(j)..sum(i, x(i,j)) =g= b(j);
모델 운송 / 모두 /;
z를 최소화하는 lp를 슬롯하여 전송을 해결합니다.
x.l, x.m을 표시합니다.
"""
먼저 다음을 설정해야 합니다.GamsWorkspace:
import os
import sys
from 슬롯 import GamsWorkspace, GamsEngineConfiguration
sys_dir = sys.argv[1] if len(sys.argv) > 1 else None
work_dir = sys.argv[2] if len(sys.argv) >2 그 외 없음
ws = GamsWorkspace(system_directory=sys_dir, Working_directory=work_dir)
슬롯에 연결하려면 다음을 정의해야 합니다.GamsEngineConfiguration개체. 이
을 지정해야 합니다.ENGINE_URL그리고ENGINE_NAMESPACE. 추가적으로 당신은
인증방법을 선택해야 합니다. 당신은 할 수 있습니다
다음 중 하나를 슬롯하여 인증합니다.슬롯자 이름그리고비밀번호조합 또는
이 예에 설명된 대로 JWT 토큰을 제공합니다.
# 슬롯 엔진의 모든 작업에 필요한 구성을 설정합니다
engine_configuration = GamsEngineConfiguration(
호스트=os.environ["ENGINE_URL"],
jwt=os.environ["ENGINE_JWT"],
네임스페이스=os.environ["ENGINE_NAMESPACE"],
)
슬롯에서 모델을 실행하도록 모든 구성이 구성되었으므로 다음을 추가하기만 하면 됩니다. 모델을 작업 공간에 추가하고 구성을 사용하여 작업을 실행합니다. 마지막으로 일부 결과를 인쇄하겠습니다.
작업 = ws.add_job_from_string(GAMS_MODEL)
job.run_engine(슬롯_구성)
job.out_db["x"]의 Rec에 대해:
print(f"x(rec.key(0),rec.key(1)): level=rec.level marginal=rec.marginal")
모델 실행에 추가 매개변수가 필요한 경우 다음에서 정의할 수 있습니다.run_engine()방법:
run_engine(
슬롯_구성,
extra_model_files=없음,
engine_options=없음,
gams_options=없음,
체크포인트=없음,
출력=없음,
create_out_db=참,
데이터베이스=없음,
Remove_results=참
)
귀하의 목표에 따라 이제 약간의 비용으로 여러 작업을 실행할 수 있습니다. 매개변수를 수정하거나 결과에 따라 이전 직업. 더 많은 예시를 보려면 참조하세요.여기.
이전 예에서는run_engine()메서드가 작업을 처리합니다.
자동으로 제출합니다. 그러나 특정 요구 사항이나 필요 사항이 있는 경우
더 많은 슬롯자 정의로 인해 기능이 제한될 수 있습니다. 보다 세밀한 제어와
모든 API 엔드포인트에 액세스하려면 다음을 슬롯할 수 있습니다.요청직접 만들 수 있는 라이브러리
HTTP 요청.
우리는 당신이 할 수 있는 최소한의 것을 보여주기 위해 인위적인 예를 사용할 것입니다
슬롯 엔진을 사용하면 이것이 얼마나 간단한지 알 수 있습니다.
사용하려면(Python을 알고 있고 이해하는 경우요청도서관).
이라는 슬롯자가 있다고 가정합니다.jon_doe슬롯 SaaS에 등록되었습니다. 이
사용자는 네임스페이스에 액세스할 수 있습니다.테스트,
16GB와 32GB라는 두 가지 인스턴스 크기로 분류됩니다.
'GAMS_z1d.large_A' 및 'GAMS_z1d.xlarge_A',
각각.
우리는요청라이브러리
REST API를 탐색하고 간단한 슬롯 작업을 제출하고
결과를 가져옵니다.
요청라이브러리, 그리고 슬롯자 인증을 관리하세요:가져오기 요청
request.auth에서 HTTPBasicAuth 가져오기
수입 시간
au = HTTPBasicAuth("john_doe","some_password")
URL = "https://engine.슬롯com/api"
실제로는 환경에서 비밀번호를 가져와야 합니다 변수!
cpu_request개수에 해당
각 인스턴스에서 사용 가능한 vCPU
AWS에서 찾을 수 있는 명목 가치보다 약간 낮습니다.
홈페이지. 이는 슬롯 소프트웨어 스택(특히
Kubernetes)가 제대로 작동하려면 일부 리소스가 필요합니다. 에 대해서도 마찬가지입니다.memory_request값, 이는
슬롯 가능한 메모리에 해당하고
또한 Kubernetes에 대한 작은 비율을 예약합니다.workspace_request값은 각 작업에 슬롯 가능한 디스크 공간(50GB)을 표시합니다.
마지막으로,승수방법을 알려드립니다
각 인스턴스의 초당 비용은 몇 센트입니다.requests.get(url + '/usage/instances/john_doe', auth=au)을 r로 슬롯:
r.raise_for_status()
r.json()
JSON으로 구문 분석된 API 응답은 슬롯자의 정보에 대한 세부 정보를 제공합니다. 슬롯 가능한 인스턴스, 기본 인스턴스 및 상속 설정:
'instances_inherited_from': 'john_doe',
'default_inherited_from': 'john_doe',
'인스턴스_사용 가능': [
'라벨': 'GAMS_z1d.large_A',
'cpu_request': 1.8,
'memory_request': 15070,
'workspace_request': 50000,
'node_selectors': ['key': '슬롯com/instanceType', 'value': 'z1d.large'],
'관용': [],
'승수': 1.0
,
'레이블': 'GAMS_z1d.xlarge_A',
'cpu_request': 3.8,
'memory_request': 30710,
'workspace_request': 50000,
'node_selectors': ['key': '슬롯com/instanceType', 'value': 'z1d.xlarge'],
'관용': [],
'승수': 1.1
],
'기본_인스턴스':
'라벨': 'GAMS_z1d.large_A',
'cpu_request': 1.8,
'memory_request': 15070,
'workspace_request': 50000,
'node_selectors': ['key': '슬롯com/instanceType', 'value': 'z1d.large'],
'관용': [],
'승수': 1.0
기본 인스턴스를 얻으려면 쿼리하는 것이 더 안전합니다./usage/instances/john_doe/default,
기본 인스턴스는 풀 인스턴스일 수 있기 때문입니다. 그 경우,
인스턴스 엔드포인트가 반환될 수 있습니다.널.
슬롯 가능한 풀 인스턴스를 얻으려면 URL을 다음으로 변경하십시오:
requests.get(url + 'usage/pools/john_doe', auth=au)을 r로 슬롯:
r.raise_for_status()
r.json()
계속해서 슬롯 작업을 엔진에 제출하겠습니다. 우리는trn스포츠우리가 복사한 모델
현재 디렉토리에 복사해야 하며 압축하기 전에 압축해야 합니다.
제출할 수 있습니다. 압축된 파일은 다음에서 슬롯됩니다.게시물API에 요청합니다. 또한 우리는
슬롯에게 다음을 사용하라고 지시합니다.GAMS_z1d.large_A인스턴스 유형.
응답에는 작업을 식별하는 데 필요한 작업 토큰이 포함되어 있습니다.
zipfile에서 ZipFile 가져오기
ZipFile('model.zip','w')을 zip으로 슬롯:
zip.write('trnsport.gms')
query_params =
'모델': 'trnsport',
'네임스페이스': '테스트',
'라벨': '인스턴스=GAMS_z1d.large_A'
# 모델 zip 파일로 딕셔너리 생성
job_files = 'model_data': open('model.zip','rb')
request.post(url + '/jobs/', params=query_params, files=job_files, auth=au)를 r로 슬롯:
r.raise_for_status()
토큰 = r.json()['token']
작업은 백그라운드에서 비동기적으로 실행되며 이제 우리는 더 추가하다 일을 하거나 다른 일을 합니다.
슬롯 SaaS에 약 2분의 시간을 주어야 합니다.
우리 작업을 위해 새로운 EC2 인스턴스를 가동하는 데 시간이 걸립니다. 이것은 필수입니다
연속된 작업 중 첫 번째 작업에만 해당됩니다.
비워진 인스턴스는 재사용되어 즉시 사용할 수 있습니다.
또한 작업을 풀 인스턴스로 보내는 경우 기다릴 필요가 없습니다.
풀은 항상 실행 중이므로 설정이 필요하지 않습니다.
이제 다음을 전송하여 간단한 작업의 상태를 확인해 보겠습니다.얻기요청.
requests.get(url + '/jobs/' + token, auth=au)을 r로 슬롯:
r.raise_for_status()
r.json()
'토큰': '842b85cd-d7e2-42dc-8268-cc25ed3d66ce',
'모델': 'trnsport',
'is_temporary_model': 사실,
'is_data_provided': 거짓,
'상태': 10,
'프로세스_상태': 0,
'stdout_filename': 'log_stdout.txt',
'네임스페이스': '테스트',
'stream_entries': [],
'인수': [],
'submitted_at': '2022-01-13T15:46:32.749866+00:00',
'finished_at': '2022-01-13T15:48:39.520392+00:00',
'사용자': '사용자 이름': 'john_doe', '삭제됨': False, 'old_username': 없음,
'텍스트_항목': [],
'dep_tokens': [],
'라벨': 'cpu_request': 1.8,
'memory_request': 15070,
'workspace_request': 50000,
'관용': [],
'node_selectors': ['key': '슬롯com/instanceType', 'value': 'z1d.large'],
'결과_존재': 참
다른 정보 중에서 우리는 다음을 볼 수 있습니다.결과_존재현장 보고서사실입니다그리고 그거프로세스_상태필드는 다음을 보고합니다.
값이 0이면 작업이 성공적으로 완료되었음을 의미합니다. 이제 우리는 할 수 있다
다른 파일을 보내 zip 파일 형식으로 결과를 다운로드하세요.얻기요청합니다.내용반환 필드
객체에는 zip 파일을 나타내는 원시 바이트 문자열이 포함되어 있으므로 다음을 수행할 수 있습니다.
필드를 '있는 그대로' 디스크에 기록하면 됩니다.
requests.get(f'url/jobs/token/result', auth=au, stream=True)을 r로 슬롯:
r.raise_for_status()
open('results.zip', 'wb')을 f로 슬롯:
# 8KB 청크로 응답을 반복합니다.
r.iter_content(chunk_size=8192)의 청크에 대해:
# 파일에 청크를 씁니다.
f.쓰기(청크)
기본적으로 zip 파일에는 실행에 대한 슬롯 로그가 포함되어 있습니다. 모델 파일과 lst 파일입니다. 다음은 로그의 일부입니다. 우리가 실제로 슬롯 엔진에서 모델을 성공적으로 해결했음을 보여줍니다.
변수 출력 변수의 반복 이중 목표
1 73.125000 x(시애틀,뉴욕) 수요(뉴욕) 여유
2 119.025000 x(시애틀,시카고) 수요(시카고) 여유
3 153.675000 x(san-diego,topeka) 수요(topeka) 여유
4 153.675000 x(san-diego,new-york) 공급(시애틀) 여유
--- LP 상태(1): 최적.
--- Cplex 시간: 0.11초(0.01틱 감지)
최적의 솔루션 발견
목표: 153.675000
다른 API 엔드포인트에 대한 자세한 내용은 참조하세요.여기.