nlpec03.gms : NLPEC 테스트 스위트 - 루프 오버 옵션 콤보

설명

이 테스트는 본질적으로 nlpec01과 유사합니다.

이 모델은 일련의 NLPEC 옵션 조합을 사용하고 NLPEC 솔버를 실행합니다.
각 조합에 대해 testlib의 mpec01 모델에서.  모든 오류
(예를 들어 NLPEC 내부의 구문이나 의미에서
재구성된 NLP 모델 등)은 mpec01 때문에 플래그가 지정되어야 합니다.
올바른 솔루션을 얻었는지 확인하는 내부 테스트가 포함됩니다.
그렇지 않으면 중단됩니다.

테스트할 옵션 조합은 다음과 같이 전략적으로 선택됩니다.
 1. 테스트할 대상이 많지 않습니다.
 2. 좋은 테스트 범위를 제공합니다.
 3. 쉽게 확장할 수 있다

테스트할 모델 세트는 이 파일에서 mpec01뿐이지만,
쉽게 변경되므로 이 모델은 개발 중에 사용하기 좋습니다.

기고자: Steven Dirkse, 2023년 8월

소형 모델 유형 :무료 슬롯 사이트


카테고리 : 무료 슬롯 사이트 테스트 라이브러리


메인 파일 : nlpec03.gms

$title 'NLPEC 테스트 스위트 - 옵션 테스트' (NLPEC03,SEQ=943)

$onText
이 테스트는 본질적으로 nlpec01과 유사합니다.

이 모델은 일련의 NLPEC 옵션 조합을 사용하고 NLPEC 솔버를 실행합니다.
각 조합에 대해 testlib의 mpec01 모델에서.  모든 오류
(예를 들어 NLPEC 내부의 구문이나 의미에서
재구성된 NLP 모델 등)은 mpec01 때문에 플래그가 지정되어야 합니다.
올바른 솔루션을 얻었는지 확인하는 내부 테스트가 포함됩니다.
그렇지 않으면 중단됩니다.

테스트할 옵션 조합은 다음과 같이 전략적으로 선택됩니다.
 1. 테스트할 대상이 많지 않습니다.
 2. 좋은 테스트 범위를 제공합니다.
 3. 쉽게 확장할 수 있다

테스트할 모델 세트는 이 파일에서 mpec01뿐이지만,
쉽게 변경되므로 이 모델은 개발 중에 사용하기 좋습니다.

기고자: Steven Dirkse, 2023년 8월
$offText

스칼라 errCount;

$if 설정 VERBOSE $setEnv VERBOSE true
$onEmbeddedCode 파이썬:
# NLPEC의 정상적인 작동을 확인합니다.
#
# 광범위한 재구성 옵션 조합에 대해 NLPEC를 실행합니다.

OS, SYS 가져오기
하위 프로세스 가져오기
무료 슬롯 사이트transfer를 gt로 가져오기

pySysdir = os.environ.get("PYSYSDIR")
없음 == pySysdir인 경우:
    gamscmd = os.path.join(r"%무료 슬롯 사이트sysdir% ".strip(), "무료 슬롯 사이트")
그 외:
    gamscmd = os.path.join(pySysdir, "무료 슬롯 사이트")

optFmt = ":<12 :>12 :>12\n"

# NLPEC용 옵션 파일을 생성합니다.
def makeOptFile(fname,sname,optS,optD,*args):
    open(fname,'w')를 f로 사용:
        f.write("dotGams \n".format(sname))
        f.write("\n")
        f.write(optFmt.format("refType" ,optS[0],optD[0]))
        f.write(optFmt.format("slack" ,optS[1],optD[1]))
        f.write(optFmt.format("제약조건",optS[2],optD[2]))
        f.write(optFmt.format("집계" ,optS[3],optD[3]))
        f.write(optFmt.format("NCPBounds" ,optS[4],optD[4]))
        인수의 t에 대해:
            o in t의 경우:
                f.write("\n".format(o))
    # 인쇄("")
    # 인쇄("makeOptFile: #args = ".format(len(args)))
    반환

# 일부 재구성에는 추가 인수가 필요합니다. 
def getXtraArgs(optS,optD):
    xx = []
    s_initMU = 없음
    d_initMU = 없음
    ["fCMfx", "fCMxf"]에서 optS[0]인 경우:
        s_initMU = "5e-6"
    ["CMfx", "CMxf"]에서 optS[0]인 경우:
        s_initMU = "8e-3"
    ["fVUsin", "fVUpow"]에서 optS[0]인 경우:
        s_initMU = "1e-3"
    ["페널티"]에서 optS[0]인 경우:
        s_initMU = "5e-3"
    ["fCMfx", "fCMxf"]에서 optD[0]인 경우:
        d_initMU = "5e-6"
    ["CMfx", "CMxf"]에서 optD[0]인 경우:
        d_initMU = "8e-3"
    ["fVUsin", "fVUpow"]에서 optD[0]인 경우:
        d_initMU = "1e-3"
    ["페널티"]에서 optD[0]인 경우:
        d_initMU = "5e-3"
    if (s_initMU가 None이 아님) 또는 (d_initMU가 None이 아님):
        s_initMU가 None인 경우:
            s_initMU = "*"
        d_initMU가 None인 경우:
            d_initMU = "*"
        xx.append(optFmt.format("initMU",s_initMU,d_initMU))

    튜플(xx) 반환

# NLPEC와 함께 optfile=<opt>를 사용하여 모델 <gms>를 해결합니다.
# 해결이 성공적으로 완료되면 true를 반환합니다.
def 프로세스GMS(gms,opt):
    # 옵션 파일이 존재하는지 확인
    주장(선택>=100)
    optFileOld = "nlpec.".format(opt)
    주장(os.path.isfile(optFileOld))
    주장(os.path.isfile(gms))

    # NLPEC를 실행
    cmd = [ gamscmd, gms, "solver=nlpec", "optfile=".format(opt)]
    p = subprocess.run(cmd, Capture_output=True, 텍스트=True)
    p.returncode != 0인 경우:
        print("processGMS(,) 실패: NLPEC 실행 실패".format(gms,opt))
        인쇄("cmd: ", cmd)
        인쇄("rc: ", p.returncode)
        open("stdout.txt","w")를 sss로 사용:
            sss.write(p.stdout)
        print("stdout은 'stdout.txt' 파일에서 사용 가능")
    주장(p.returncode == 0)
    True를 반환

def getCombos(행):
    return [ 범위(5)의 k에 대한 row.iloc[2*k] ] , [ 범위(5)의 k에 대한 row.iloc[2*k+1] ] 

__name__ == "__main__"인 경우:
    장황하다 = 거짓
    e카운트 = 0
    시도해 보세요:
        없음 == pySysdir인 경우:
            m = gt.Container("nlpec03_opts.gdx", system_directory=r"%무료 슬롯 사이트sysdir% ".strip())
        그 외:
            m = gt.Container("nlpec03_opts.gdx", system_directory=pySysdir)
        df = m['valid10'].records
        verbose = (없음 != os.environ.get("VERBOSE"))
        # rS, rD = getCombos(df.iloc[0])

        nOptFiles = 0
        n테스트 = 0
        n델타 = 0
        gmsfiles = [ "mpec01.gms" ]
        idx의 경우 df.iterrows()의 행:
            rS, rD = getCombos(행)
            if (nOptFiles >= 999999): # 빠르고 성공하는 쉬운 방법
                계속하다
            nOptFiles += 1
            자세한 경우:
                print("테스트 행 : ".format(idx,row.to_list()))
            xargs = getXtraArgs(rS,rD)
            makeOptFile("nlpec.100","scalar100.gms",rS,rD,xargs)

            gmsfiles의 gms에 대해:
                n테스트 += 1
                # print("처리할 무료 슬롯 사이트 파일: ".format(gms))
                brc = 프로세스GMS(gms,100)
                자세한 경우:
                    인쇄(" 무료 슬롯 사이트 파일:  결과: ".format(gms,brc))
                brc가 아닌 경우:
                    n델타 += 1

        자세한 경우:
            인쇄("")
            print ("모두 완료:  옵션 파일,  비교,  델타".format(nOptFiles,nTests,nDeltas))
        주장(0 == n델타)

    e와 같은 예외를 제외하고:
        인쇄(대표(e))
        e카운트 = e카운트 + 1
    무료 슬롯 사이트set('errCount', [eCount])
$offEmbeddedCode 오류 개수

오류 개수를 표시합니다.
abort$errCount "테스트 실행 중 오류가 발생했습니다.", errCount;