SUMOReal MSCFModel_Wiedemann::_v(const MSVehicle* veh, SUMOReal predSpeed, SUMOReal gap) const { const VehicleVariables* vars = (VehicleVariables*)veh->getCarFollowVariables(); const SUMOReal dx = gap + myType->getLength(); // wiedemann uses brutto gap const SUMOReal v = veh->getSpeed(); const SUMOReal vpref = veh->getMaxSpeed(); const SUMOReal dv = v - predSpeed; const SUMOReal bx = myAX + (1 + 7 * mySecurity) * sqrt(v); // Harding propose a factor of *.8 here const SUMOReal ex = 2 - myEstimation; // + RandHelper::randNorm(0.5, 0.15) const SUMOReal sdx = myAX + ex * (bx - myAX); /// the distance at which we drift out of following const SUMOReal sdv_root = (dx - myAX) / myCX; const SUMOReal sdv = sdv_root * sdv_root; const SUMOReal cldv = sdv * ex * ex; const SUMOReal opdv = cldv * (-1 - 2 * RandHelper::randNorm(0.5, 0.15)); // select the regime, get new acceleration, compute new speed based SUMOReal accel; if (dx <= bx) { accel = emergency(dv, dx); } else if (dx < sdx) { if (dv > cldv) { accel = approaching(dv, dx, bx); } else if (dv > opdv) { accel = following(vars->accelSign); } else { accel = fullspeed(v, vpref, dx, bx); } } else { if (dv > sdv && dx < D_MAX) { //@note other versions have an disjunction instead of conjunction accel = approaching(dv, dx, bx); } else { accel = fullspeed(v, vpref, dx, bx); } } // since we have hard constrainst on accel we may as well use them here accel = MAX2(MIN2(accel, myAccel), -myDecel); const SUMOReal vNew = MAX2(SUMOReal(0), v + ACCEL2SPEED(accel)); // don't allow negative speeds return vNew; }
void initpc() { char *p; // allegro_init(); get_executable_name(pcempath,511); pclog("executable_name = %s\n", pcempath); p=get_filename(pcempath); *p=0; pclog("path = %s\n", pcempath); fdd_init(); keyboard_init(); mouse_init(); joystick_init(); midi_init(); loadconfig(NULL); pclog("Config loaded\n"); loadfont("mda.rom", 0, cga_fontdat, cga_fontdatm); loadfont("roms/pc1512/40078.ic127", 0, pc1512_fontdat, pc1512_fontdatm); loadfont("roms/pc200/40109.bin", 0, pc200_fontdat, pc200_fontdatm); codegen_init(); cpuspeed2=(AT)?2:1; // cpuspeed2=cpuspeed; atfullspeed=0; device_init(); initvideo(); mem_init(); loadbios(); mem_add_bios(); timer_reset(); sound_reset(); fdc_init(); // #ifdef USE_NETWORKING vlan_reset(); //NETWORK network_card_init(network_card_current); // #endif loaddisc(0,discfns[0]); loaddisc(1,discfns[1]); //loadfont(); loadnvr(); sound_init(); resetide(); #if __unix if (cdrom_drive == -1) cdrom_null_open(cdrom_drive); else #endif ioctl_open(cdrom_drive); pit_reset(); /* if (romset==ROM_AMI386 || romset==ROM_AMI486) */fullspeed(); ali1429_reset(); // CPUID=(is486 && (cpuspeed==7 || cpuspeed>=9)); // pclog("Init - CPUID %i %i\n",CPUID,cpuspeed); shadowbios=0; #if __unix if (cdrom_drive == -1) cdrom_null_reset(); else #endif ioctl_reset(); }