/** branching execution method for external candidates */ static SCIP_DECL_BRANCHEXECEXT(branchExecextInference) { /*lint --e{715}*/ SCIP_BRANCHRULEDATA* branchruledata; SCIP_VAR** cands; SCIP_Real* candsols; int ncands; SCIPdebugMessage("Execext method of inference branching\n"); /* get branching rule data */ branchruledata = SCIPbranchruleGetData(branchrule); assert(branchruledata != NULL); /* get branching candidates */ SCIP_CALL( SCIPgetExternBranchCands(scip, &cands, &candsols, NULL, &ncands, NULL, NULL, NULL, NULL) ); assert(ncands > 0); /* perform the branching */ SCIP_CALL( performBranching(scip, cands, candsols, ncands, branchruledata->conflictweight, branchruledata->inferenceweight, branchruledata->cutoffweight, branchruledata->reliablescore, branchruledata->useweightedsum, result) ); return SCIP_OKAY; }
/** branching execution method for fractional LP solutions */ static SCIP_DECL_BRANCHEXECLP(branchExeclpInference) { /*lint --e{715}*/ SCIP_BRANCHRULEDATA* branchruledata; SCIP_VAR** cands; int ncands; SCIPdebugMessage("Execlp method of inference branching\n"); /* get branching rule data */ branchruledata = SCIPbranchruleGetData(branchrule); assert(branchruledata != NULL); if( branchruledata->fractionals ) { /* get LP candidates (fractional integer variables) */ SCIP_CALL( SCIPgetLPBranchCands(scip, &cands, NULL, NULL, NULL, &ncands, NULL) ); } else { /* get pseudo candidates (non-fixed integer variables) */ SCIP_CALL( SCIPgetPseudoBranchCands(scip, &cands, NULL, &ncands) ); } /* perform the branching */ SCIP_CALL( performBranching(scip, cands, NULL, ncands, branchruledata->conflictweight, branchruledata->inferenceweight, branchruledata->cutoffweight, branchruledata->reliablescore, branchruledata->useweightedsum, result) ); return SCIP_OKAY; }
/* * This code is used to execute each instruction. */ void executeOneInstruction(int instr) { int X, Y, flagX1, flagX2, flagY1, flagY2, operation; char string[WORD_SIZE]; bzero(string, 16); switch (instr) { case START: storeInteger(reg[IP_REG], getInteger(reg[IP_REG]) + WORDS_PER_INSTR); //increment IP break; case MOV: //1st phase:get the value 2nd phase:store the value X = yylex(); flagX1 = yylval.flag; flagX2 = yylval.flag2; Y = yylex(); flagY1 = yylval.flag; flagY2 = yylval.flag2; strcpy(string, yylval.data); if (!performMOV(X, flagX1, flagX2, Y, flagY1, flagY2, string)) return; storeInteger(reg[IP_REG], getInteger(reg[IP_REG]) + WORDS_PER_INSTR); break; case ARITH: operation = yylval.flag; X = yylex(); flagX1 = yylval.flag; if (operation != INR && operation != DCR) { Y = yylex(); flagY1 = yylval.flag; } if (!performArithmetic(X, flagX1, Y, flagY1, operation)) return; storeInteger(reg[IP_REG], getInteger(reg[IP_REG]) + WORDS_PER_INSTR); break; case LOGIC: operation = yylval.flag; X = yylex(); flagX1 = yylval.flag; Y = yylex(); flagY1 = yylval.flag; if (!performLogic(X, flagX1, Y, flagY1, operation)) return; storeInteger(reg[IP_REG], getInteger(reg[IP_REG]) + WORDS_PER_INSTR); break; case BRANCH: operation = yylval.flag; X = yylex(); flagX1 = yylval.flag; if (operation != JMP) { Y = yylex(); flagY1 = yylval.flag; } if (!performBranching(X, flagX1, Y, flagY1, operation)) return; break; case PUSH: X = yylex(); flagX1 = yylval.flag; if (!performPush(X, flagX1)) return; storeInteger(reg[IP_REG], getInteger(reg[IP_REG]) + WORDS_PER_INSTR); break; case POP: X = yylex(); flagX1 = yylval.flag; if (!performPop(X, flagX1)) return; storeInteger(reg[IP_REG], getInteger(reg[IP_REG]) + WORDS_PER_INSTR); break; case CALL: X = yylex(); flagX1 = yylval.flag; if (!performCall(X, flagX1)) return; break; case RET: if (!performRet()) return; break; case INT: X = yylex(); flagX1 = yylval.flag; if (!performINT(X, flagX1)) return; break; case IRET: if (!performIRET()) return; break; case IN: X = yylex(); flagX1 = yylval.flag; if (!performIN(X, flagX1)) return; storeInteger(reg[IP_REG], getInteger(reg[IP_REG]) + WORDS_PER_INSTR); break; case OUT: X = yylex(); flagX1 = yylval.flag; if (!performOUT(X, flagX1)) return; storeInteger(reg[IP_REG], getInteger(reg[IP_REG]) + WORDS_PER_INSTR); break; case LOAD: case STORE: X = yylex(); flagX1 = yylval.flag; Y = yylex(); flagY1 = yylval.flag; if (!performLoadStore(X, flagX1, Y, flagY1, instr)) return; storeInteger(reg[IP_REG], getInteger(reg[IP_REG]) + WORDS_PER_INSTR); break; case HALT: if (mode == USER_MODE) { raiseException(newException(EX_ILLINSTR, "Call to Privileged Instruction HALT in USER mode", 0)); return; } printf("Machine is halting\n"); exit(0); break; case END: break; case BRKP: if (isDebugModeOn()) { step_flag = 1; printf("\nXSM Debug Environment\nType \"help\" for getting a list of commands\n"); } storeInteger(reg[IP_REG], getInteger(reg[IP_REG]) + WORDS_PER_INSTR); break; default: raiseException(newException(EX_ILLINSTR, "Illegal Instruction", 0)); return; } }