robot.gms : 로봇팔 COPS 2.0 #8

설명

로봇 팔이
두 지점 사이를 여행합니다.

이 모델은 COPS 벤치마킹 제품군에서 나온 것입니다.
참조http://www-unix.mcs.anl.gov/~more/cops/.이산화 지점 수는 다음 명령을 사용하여 지정할 수 있습니다
라인 매개변수 --nh. NH에 대한 COPS 성능 테스트가 보고되었습니다.
= 50, 100, 200, 400

대형 모델 유형 :NLP


카테고리 : 슬롯 모델 라이브러리


메인 파일 : robot.gms

$title 로봇 팔 COPS 2.0 #8 (ROBOT,SEQ=236)

$onText
로봇 팔이 동작하는 데 걸리는 시간을 최소화하세요.
두 지점 사이를 여행합니다.

이 모델은 COPS 벤치마킹 제품군에서 나온 것입니다.
http://www-unix.mcs.anl.gov/~more/cops/를 참조하세요.

이산화 지점 수는 다음 명령을 사용하여 지정할 수 있습니다.
라인 매개변수 --nh. NH에 대한 COPS 성능 테스트가 보고되었습니다.
= 50, 100, 200, 400

Dolan, E D 등, JJ, 벤치마킹 최적화
COPS가 포함된 소프트웨어. 기술. 대표, 수학과 컴퓨터
과학부, 2000.

Vanderbei, R, 비선형 최적화 모델.

키워드: 비선형 프로그래밍, 엔지니어링, 로봇공학
$offText

$if 세트 n $set nh %n%
$설정되지 않은 경우 nh $set nh 50

h '간격' 설정 / h0*h%nh% /;

스칼라
   nh '간격 수' / %nh% /
   L '팔 전체 길이' / 5 /
   max_u_rho / 1 /
   max_u_the / 1 /
   max_u_phi / 1 /;

변수
   로(h)
   그(h)
   파이(h)
   rho_dot(h)
   the_dot(h)
   phi_dot(h)
   u_rho(h)
   u_the(h)
   u_phi(h)
   단계
   tf
   i_the(h)
   i_phi(h);

방정식
   tf_eqn
   rho_eqn(h)
   the_eqn(h)
   phi_eqn(h)
   u_rho_eqn(h)
   u_the_eqn(h)
   u_phi_eqn(h)
   i_the_eqn(h)
   i_phi_eqn(h);

tf_eqn.. tf =e= 단계*nh;

i_phi_eqn(h).. i_phi(h) =e= (power(L - rho(h),3) + power(rho(h),3))/3.0;

i_the_eqn(h).. i_the(h) =e= i_phi(h)*sqr(sin(phi(h)));

rho_eqn(h-1).. rho(h) =e= rho(h-1) + 0.5*단계*(rho_dot(h) + rho_dot(h-1));

the_eqn(h-1).. the(h) =e= the(h-1) + 0.5*단계*(the_dot(h) + the_dot(h-1));

phi_eqn(h-1).. phi(h) =e= phi(h-1) + 0.5*단계*(phi_dot(h) + phi_dot(h-1));

u_rho_eqn(h-1)..
   rho_dot(h) =e= rho_dot(h-1) + 0.5*단계*(u_rho(h) + u_rho(h-1))/L;

u_the_eqn(h-1)..
   the_dot(h) =e= the_dot(h-1) + 0.5*단계*(u_the(h)/i_the(h) + u_the(h-1)/i_the(h-1));

u_phi_eqn(h-1)..
   phi_dot(h) =e= phi_dot(h-1) + 0.5*단계*(u_phi(h)/i_phi(h) + u_phi(h-1)/i_phi(h-1));

rho.lo(h) = 0;    rho.up(h) = L;
the.lo(h) = -pi;  the.up(h) = 파이;
phi.lo(h) = 0;    phi.up(h) = 파이;

u_rho.lo(h) = -max_u_rho;  u_rho.up(h) = max_u_rho;
u_the.lo(h) = -max_u_the;  u_the.up(h) = max_u_the;
u_phi.lo(h) = -max_u_phi;  u_phi.up(h) = max_u_phi;

i_the.lo(h) = 0.0001;
i_phi.lo(h) = 0.0001;

firstlast(h) / h0, h%nh% / 설정;

the.fx('h0') = 0;
the.fx('h%nh%') = 2*pi/3;

rho.fx(firstlast) = 4.5;
phi.fx(firstlast) = pi/4;
rho_dot.fx(firstlast) = 0;
the_dot.fx(firstlast) = 0;
phi_dot.fx(firstlast) = 0;
i_phi.fx(firstlast(h)) = (power(L - rho.l(h),3) + power(rho.l(h),3))/3.0;
i_the.fx(firstlast(h)) = i_phi.l(h)*sqr(sin(phi.l(h)));

rho.l(h) = 4.5;
the.l(h) = (2*pi/3)*sqr(ord(h)/nh);
phi.l(h) = pi/4;

rho_dot.l(h) = 0.0;
the_dot.l(h) = (4*pi/3)*(ord(h)/nh);
phi_dot.l(h) = 0.0;

단계 1 = 1/nh;
i_phi.l(h) = (전력(L - rho.l(h),3) + 전력(rho.l(h),3))/3.0;
i_the.l(h) = i_phi.l(h)*sqr(sin(phi.l(h)));

모델 로봇 / 모두 /;

$if set workSpace robots.workSpace = %workSpace%

nlp를 사용하여 로봇 최소화 tf를 해결합니다.