자동으로 많이 돌리는 것과 비교 가능한 실험은 다르다
M31.03은 같은 입력의 실패를 재현하고 작은 수정을 고정 회귀로 확인했다. 시뮬레이션 반복은 이를 여러 환경·초기조건·잡음 조건으로 넓힌다. 자동으로100번 실행해도 어떤 소스가 어떤 월드/설정에서 실행되었는지 없으면 비교 근거가 약하다. 좋은 반복은 실행 개수와 함께 고정한 조건·변경한 조건·결과의 분모를 설명한다.
CI(continuous integration, 지속적 통합)는 소스 변경을 정해진 자동 검사와 연결하는 과정이다. 로봇 프로젝트에서는 자료/단위 검사, 기능 회귀, 시뮬레이션 시나리오와 결과 집계를 구분할 수 있다. 문법/빌드가 통과한 것과 주행 시나리오의 판정이 통과한 것은 다르다. 이 단위는 워크플로 문법이나 실제CI구축 대신 검사 설계와 결과 해석을 다룬다.
seed는 난수 생성의 시작 조건을 지정하는 값이다. 같은seed를남겨도소스/라이브러리·물리엔진·step·초기상태·스레드/하드웨어·이벤트순서가달라지면전체결과가같다고보장되지않는다. seed하나만고정하고재현성전체를확보했다고보고하지않는다. 어떤범위에서같은입력/결과를기대하는지명시한다.
실행 행렬과 초기화를 먼저 고정한다
교육용 소스기준S와후보T를비교한다. 이식별자는실제커밋/버전이아니며M31.03의수정후보이름과도별개다. 월드조건A/B각각에서seed11/22/33을쓰면조건은2×3=6개다. 두소스를각조건에서실행하므로총12실행,비교할쌍은6개다. 같은조건의S/T를한쌍으로보는것을쌍비교(paired comparison)라고한다.
각실행은같은초기로봇위치/속도·목표·월드/물체배치·센서/물리설정·관측계약·성공판정에서시작한다. 모델/메시·의존성/엔진·물리step·시간모드와제어주기·리셋절차도기록한다. 이전실행의속도/TF/큐나상태파일이남아있다면다음실행은같은초기조건이아닐수있다. 실패후리셋도동일하게확인한다.
이번 합성 시나리오의 성공은20초이내에목표오차≤0.10m·속도≤0.05m/s를0.5초유지하고충돌이없는것으로정한다. 완료시각은유지조건을충족한때다. 20초경계는포함한다. 20초까지조건을못맞추면timeout행동실패다. 모든시간은모형시각이며실제벽시계실행속도/지연성능과구분한다. 아래결과는이판정이이미적용된제공표다.
검사 단계와 결과 파일을 연결한다
CI관문을 작게 나누면 무엇을 확인했는지 설명하기 쉽다. 첫관문은환경/자산·설정/단위와필수입력의가용성,두번째는작은기능/경계/실패회귀,세번째는위12시뮬레이션슬롯,마지막은결과/산출물완비와비교판정이다. 앞관문실패나필수검사0건이면후속성공만으로전체통과를표시하지않는다.
GitHub 공식 matrix 안내는조건조합을여러실행으로만드는개념을설명한다. 병렬실행은독립된월드/노드/포트·출력경로/작업공간과자원한도를확인한뒤수행한다. 같은파일이나전역시뮬레이터를동시에초기화하면조건을오염시킬수있다. 몇개까지동시에돌리는지와CPU/GPU/메모리경쟁의영향도남긴다.
각슬롯의산출물(artifact)은실행ID·소스/설정/입력/월드식별자·seed·환경·시작/종료상태·결과JSON/표·로그·관련관측/추적을묶는다. GitHub 공식 artifact 안내는작업이끝난뒤결과를보존/전달하는경로를제공한다. 파일명이results라는것만으로현소스/조건의결과라고승인하지않고내용의실행ID/지문을대조한다. 실제클라우드에업로드한활동은이단위에포함하지않는다.
완전한 여섯 쌍의 결과를 읽는다
다음은 실제 시뮬레이터의성능기록이아닌합성표다. A/11은월드A·seed11이다. 모든슬롯이실행되었고필요산출물이존재하며충돌0이라고제공한다. “실패/20”은프로그램실행불능이아니라20초까지도착조건을달성하지못한행동실패다.
| 조건/seed | 기준S · 결과/초 | 후보T · 결과/초 |
|---|---|---|
| A/11 | 성공 / 10 | 성공 / 9 |
| A/22 | 성공 / 12 | 성공 / 10 |
| A/33 | 성공 / 11 | 실패 / 20 |
| B/11 | 실패 / 20 | 성공 / 14 |
| B/22 | 성공 / 15 | 성공 / 12 |
| B/33 | 실패 / 20 | 성공 / 16 |
기준S는4/6≈66.7%,후보T는5/6≈83.3%성공이다. 차이는1/6≈16.7퍼센트포인트다. 확률전체의개선이나실물성공률이아니라선택한여섯조건의관측비율이다. 작은표본의점추정만으로통계적유의성이나일반화를확정하지않는다.
쌍별로보면T만성공한경우2개(B/11,B/33),S만성공한경우1개(A/33),동일결과3개(A/11,A/22,B/22)다. 조건별로A는3/3에서2/3으로악화했고B는1/3에서3/3으로좋아졌다. 전체5/6이4/6보다커도 A/33의새실패는남는다. 월드별/실패유형별결과를버리고전체숫자만쓰지않는다.
시간은 같은 성공쌍과 같은 단위로 비교한다
각소스의성공한실행만평균내면S는(10+12+11+15)/4=12초, T는(9+10+14+12+16)/5=12.2초다. 이숫자는각각의성공조건에서계산한평균이다. T가새롭게성공한더긴B조건도포함되어분모/구성이달라졌다. 이것만으로같은조건에서T가느려졌다고단정할수없다.
양쪽모두성공한 A/11,A/22,B/22세쌍에서는 S평균(10+12+15)/3=37/3≈12.333초, T평균(9+10+12)/3=31/3≈10.333초다. 이세쌍의평균완료시간은2초줄었다. 여전히공통성공조건에한정된비교이며A/33실패를상쇄하거나모든환경에서의속도개선을뜻하지않는다. 완료시간·한제어tick지연·전체CI벽시계시간도서로다른지표다.
실패시간20을성공시간평균에서제외했다는사실과실패를성공률분모에서제외한다는것은다르다. timeout은여섯시도중실패로반드시남긴다. 시간초과의완료시간을정확히20초도착으로만들어평균에섞지도않는다. 따로시간예산내성공/시간초과분포를보고할수있다.
사전 관문으로 통과를 판정한다
결과를 보기전에 이번작업의기준을다음과같이고정했다고하자. 12슬롯의근거완비,전체성공비율비감소,각월드성공비율비감소,충돌0,공통성공쌍의평균시간비증가다. 실제제품에따라교환조건은달라질수있지만이번합의는결과를본뒤완화하지않는다.
T는전체성공·충돌·공통성공시간과근거완비조건을통과하지만A의성공률이3/3→2/3으로낮아져전체관문은실패다. “전체성공률이올랐으므로통과”는선택한기준과다르다. A/33의원로그/관측/소스차이로가설을세우고M31.03의작은수정/회귀를반복한다. 조건별새실패를허용해야할요구변경이생기면기준/영향검토를따로남긴다.
재시도와 실행 불능을 숨기지 않는다
A/33을삭제하면T는남은5조건에서5/5=100%가된다. 그러나계획한조건이빠졌고원래5/6을바꾸었으므로원회차의완료근거가아니다. 실패조건만성공할때까지재시도하고마지막결과로덮어쓰는것도선택편향이다. 진단용재시도는새run_id와이유/변경/재시도횟수를남기고첫회차와연결한다. 후속패치가나오면고정된전체회귀범위로다시판정한다.
인프라문제로월드가로드되지않거나runner가시작하지못했다면행동실패와는다른실행불능/미확인이다. 해당슬롯의시나리오결과를성공으로만들거나조용히분모에서빼지않는다. 수집된관측결과/실행가능슬롯수와계획슬롯수를구분해보고하고필수근거가없으므로전체CI관문은통과시키지않는다. workflow 공식 문서의실패/취소·후속관계설정도이판정정책과대조해야한다. 선택심화의실패허용설정이필수검사를우회하지않게한다.
의존성캐시는실행시간을줄일수있지만과거성능결과가자동으로현재근거가되는것은아니다. 결과재사용은소스·입력/설정/환경/판정지문과재사용범위를명시한경우에만검토한다. 실행계획과다른재사용을새실행처럼보고하지않는다. 로그와산출물보존은실패해도수행되도록정책을정하되,보존성공을시나리오통과로오해하지않는다.
최종보고는계획/실행/미확인슬롯,전체/조건별/쌍별결과,지표별분모/단위,실패/재시도·아티팩트지문과미확인실물범위를담는다. 도구가표를생성했다고수집/집계가맞는지는별도로검토한다. 이단위의표분석은실제CI나Gazebo실증이아니다. 학습은다음M06.02의팔기구학으로이어지고,모바일전체P2실행패키지의검수는별도과제다.
후반 자동화로 돌아오면 M31.05 장시간·다중 Agent 작업에서 같은 조건/산출물 원칙을 선행 그래프·파일/자원 소유·중단 후 복구와 인수로 확장한다. 이는 S05의 다음 학습 M06.02를 건너뛰라는 안내가 아니다.