public void UpdateInfo(IAdmissionCarrier iSourceCarrier, IAdmissionCarrier iTargetCarrier, IAdmissionUser user, int carrierIndex) { iSourceCarrier.IsDLLoadBalance = true; iTargetCarrier.IsDLLoadBalance = true; SimulationUser user2 = user as SimulationUser; SimulationCarrier carrier = iTargetCarrier as SimulationCarrier; AdmissionCellTag admissionCarrierTag = iSourceCarrier.AdmissionCarrierTag as AdmissionCellTag; AdmissionCellTag tag2 = iTargetCarrier.AdmissionCarrierTag as AdmissionCellTag; base.ExchangeServiceCarrier(iSourceCarrier, iTargetCarrier, user, carrierIndex); if (iTargetCarrier.Carrier.ID == user2.BestServiceCellBeforeHandOver.Carrier.Carrier.ID) { user2.IsEdgeUser = user2.IsEdgeUserBeforeHandOver; } else { user2.IsEdgeUser = true; } if (user.ServiceCount == 0) { admissionCarrierTag.DLHasOutThroughput += user.DlMacMinThroughputDemand; tag2.DLAcceptHOThroughput += user.DlMacMinThroughputDemand; } else { admissionCarrierTag.DLHasOutThroughput += user2.ActualAvgBr; tag2.DLAcceptHOThroughput += user2.ActualAvgBr; } tag2.DLAvailableHOThroughput = tag2.DLTotalHOThroughput - tag2.DLAcceptHOThroughput; base.UpdateHOUserInfo(user2, base.m_CurrentTTI); }
/// <summary> /// 完成用户的切换 /// </summary> /// <param name="iSourceCarrier"></param> /// <param name="ngbCarrier"></param> /// <param name="lbUserList"></param> public void CircleUser(IAdmissionCarrier iSourceCarrier, IAdmissionCarrier ngbCarrier, List<ISimulationUser> lbUserList) { List<ISimulationUser> list = new List<ISimulationUser>(); list.AddRange(lbUserList); foreach (ISimulationUser user in list) { IAdmissionUser adUser = user as IAdmissionUser; AdmissionCellTag admissionSourceCarrierTag = iSourceCarrier.AdmissionCarrierTag as AdmissionCellTag; if (admissionSourceCarrierTag.ULHasOutThroughput >= admissionSourceCarrierTag.ULSourceOutThroughput) { break; } AdmissionCellTag ngbCarrierAdTag = ngbCarrier.AdmissionCarrierTag as AdmissionCellTag; // if (ngbCarrierAdTag.ULAcceptHOThroughput > ngbCarrierAdTag.ULTotalHOThroughput) //有0>0的情况 if (ngbCarrierAdTag.ULAcceptHOThroughput >= ngbCarrierAdTag.ULTotalHOThroughput) { break; } //该目标小区在该用户的邻小区列表中的编号 int carrierIndex = 0; if (base.IsRSRPSatisfy(user, ngbCarrier, out carrierIndex) && this.IsNgbAcceptUser(adUser, ngbCarrier)) { this.UpdateInfo(iSourceCarrier, ngbCarrier, adUser, carrierIndex); this.UpdateList(iSourceCarrier, ngbCarrier, user); lbUserList.Remove(user); } } }
public override void CalculateSourceOutThroughput(IAdmissionCarrier iAdmissionCarrier) { SimulationCarrier carrier = iAdmissionCarrier as SimulationCarrier; float num = carrier.Carrier.UlTargetLoad * base.m_LBThresholdParam.MlbRationTh; double num2 = carrier.UlActualTh * (1f - (num / carrier.UlActualLoad)); AdmissionCellTag admissionCarrierTag = iAdmissionCarrier.AdmissionCarrierTag as AdmissionCellTag; admissionCarrierTag.ULSourceOutThroughput = 0.5 * num2; }
public override bool IsNgbAcceptUser(IAdmissionUser user, IAdmissionCarrier carrier) { AdmissionCellTag admissionCarrierTag = carrier.AdmissionCarrierTag as AdmissionCellTag; bool flag = false; double num = admissionCarrierTag.DLAcceptHOThroughput + user.DlMacMinThroughputDemand; if (num <= admissionCarrierTag.DLTotalHOThroughput) { flag = this.IsNgbSatisAcceptUser(user, carrier); } return flag; }
/// <summary> /// 负载均衡 /// </summary> /// <param name="iSimulationCarrierList"></param> /// <param name="currentTTI"></param> /// <param name="iAdmissionCarrier"></param> private void LoadBanlance(List<ISimulationCarrier> iSimulationCarrierList, int currentTTI, IAdmissionCarrier iAdmissionCarrier) { bool a = SimulationConstant.IS_LOAD_BANLANCE_ON; bool b = iAdmissionCarrier.UlActualLoad > (iAdmissionCarrier.Carrier.UlTargetLoad * SimulationConstant.MLBRatioTh); bool c = currentTTI >= this.m_LBThresholdParam.FirstLbTime; bool d = ((currentTTI - this.m_LBThresholdParam.FirstLbTime) % this.m_LBThresholdParam.LbPeriod) == 0; if ((a && b) && (c && d)) { new UlLoadBalancingService(currentTTI, this.m_LBThresholdParam).LoadBalanceingProcess(iAdmissionCarrier, iSimulationCarrierList); } }
/// <summary> /// 执行切换(由负载均衡调用) /// </summary> /// <param name="iSourceCarrier"></param> /// <param name="ngbCarrierList">目标小区已排序</param> /// <param name="lbUserList">负载均衡用户已排序</param> public void HandOverProcess(IAdmissionCarrier iSourceCarrier, List<ISimulationCarrier> ngbCarrierList, List<ISimulationUser> lbUserList) { foreach (IAdmissionCarrier carrier in ngbCarrierList) { AdmissionCellTag admissionCarrierTag = iSourceCarrier.AdmissionCarrierTag as AdmissionCellTag; if (admissionCarrierTag.ULHasOutThroughput >= admissionCarrierTag.ULSourceOutThroughput) { break; } this.CircleUser(iSourceCarrier, carrier, lbUserList); } }
/// <summary> /// 判断目标邻小区是否可以接受预切换过来的用户 /// </summary> /// <param name="user"></param> /// <param name="carrier"></param> /// <returns></returns> public override bool IsNgbAcceptUser(IAdmissionUser user, IAdmissionCarrier carrier) { AdmissionCellTag admissionCarrierTag = carrier.AdmissionCarrierTag as AdmissionCellTag; bool flag = false; UnionPsService unionPsService = SimulationTools.GetUnionPsService(user.LTEUser.Service); double num = admissionCarrierTag.ULAcceptHOThroughput + unionPsService.UlMinThroughputDemand; if (num <= admissionCarrierTag.ULTotalHOThroughput) { flag = this.IsNgbSatisAcceptUser(carrier); } return flag; }
/// <summary> /// 计算边缘负载 /// </summary> /// <param name="iAdmissionCarrier"></param> /// <returns></returns> public override float CalculateEdgeLoad(IAdmissionCarrier iAdmissionCarrier) { int num2 = 0; foreach (IAdmissionUser user in iAdmissionCarrier.UlUserList) { if (user.IsEdgeUser) { num2 += user.RbList.Count; } } return (((float) num2) / (iAdmissionCarrier.BandWidthRbNum * iAdmissionCarrier.Carrier.UlTargetLoad)); }
/// <summary> /// 若该小区拥有邻小区,则获得邻小区列表 /// </summary> /// <param name="iLoadBalanceCarrier"></param> /// <param name="allSimulationCarrierlist"></param> /// <returns></returns> private List<ISimulationCarrier> GetNgbFromPlan(IAdmissionCarrier iLoadBalanceCarrier, List<ISimulationCarrier> allSimulationCarrierlist) { List<ISimulationCarrier> list = new List<ISimulationCarrier>(); foreach (IANeighbours neighbours in iLoadBalanceCarrier.Carrier.InterNeighbours) { list.Add(this.FindCarrierInList(neighbours, allSimulationCarrierlist)); } foreach (IANeighbours neighbours in iLoadBalanceCarrier.Carrier.IntraNeighbours) { list.Add(this.FindCarrierInList(neighbours, allSimulationCarrierlist)); } return list; }
/// <summary> /// 计算邻小区可接受的最大的切换过来的吞吐量 /// </summary> /// <param name="iAdmissionCarrier"></param> /// <param name="currentTTI"></param> public override void CalculateNgbMaxAcceptThroughput(IAdmissionCarrier iAdmissionCarrier, int currentTTI) { AdmissionCellTag admissionCarrierTag = iAdmissionCarrier.AdmissionCarrierTag as AdmissionCellTag; SimulationCarrier carrier = iAdmissionCarrier as SimulationCarrier; float num = (carrier.UlActualTh * iAdmissionCarrier.Carrier.UlTargetLoad) / carrier.UlActualLoad; //下面为什么还要乘以0.1f float num2 = 0.1f * (num - carrier.UlActualTh); admissionCarrierTag.ULTotalHOThroughput = num2; if (carrier.UlActualLoad <= 0.100001) { admissionCarrierTag.ULTotalHOThroughput = double.MaxValue; } }
/// <summary> /// 执行负载均衡 /// </summary> /// <param name="iLoadBalanceCarrier"></param> /// <param name="allSimulationCarrierlist"></param> public void DoLoadBalance(IAdmissionCarrier iLoadBalanceCarrier, List<ISimulationCarrier> allSimulationCarrierlist) { //邻小区列表 this.m_NgbList = this.GetNgbList(iLoadBalanceCarrier, allSimulationCarrierlist); this.GetTargetNgb(iLoadBalanceCarrier, this.m_NgbList); if (this.m_NgbList.Count != 0) { this.GetLBUser(iLoadBalanceCarrier, this.m_LBUserList); if (this.m_LBUserList.Count != 0) { this.CalculateSourceOutThroughput(iLoadBalanceCarrier); this.DoHandOver(iLoadBalanceCarrier, this.m_NgbList, this.m_LBUserList); } } }
public override void LoadControlProcess(IAdmissionCarrier iLoadControlCarrier) { bool flag2 = true; bool flag3 = true; new SatisficationCalculate(base.m_CurrentTTI, base.m_SatisficationThParam).GetUsers(iLoadControlCarrier.DlDataWaitUserList, this.m_GBRUserlist, this.m_NonGBRUserlist); AdmissionCellTag admissionCarrierTag = iLoadControlCarrier.AdmissionCarrierTag as AdmissionCellTag; if (admissionCarrierTag.DLGBRSatisfication < base.m_LCThresholdParam.LcGBRSatisfyTh) { this.ProcessWhenGBRNotSatisfy(this.m_GBRUserlist, iLoadControlCarrier); } flag2 = admissionCarrierTag.DLVoiceSatisfication >= base.m_LCThresholdParam.LcVoiceSatisfyTh; flag3 = admissionCarrierTag.DLNonGBRSatisfication >= base.m_LCThresholdParam.LcNonGBRSatisfyTh; if (!(flag2 && flag3)) { this.ProcessWhenGBRSatisfy(this.m_GBRUserlist, iLoadControlCarrier); } }
public void CalculateServiceSatisfy(IAdmissionCarrier carrier, int currentTTI) { this.m_GBRUserlist = new List<ISimulationUser>(); this.m_NonGBRUserlist = new List<ISimulationUser>(); SatisficationCalculate calculate = new SatisficationCalculate(currentTTI, this.m_SatisficationThParam); AdmissionCellTag admissionCarrierTag = carrier.AdmissionCarrierTag as AdmissionCellTag; calculate.GetUsers(carrier.DlDataWaitUserList, this.m_GBRUserlist, this.m_NonGBRUserlist); admissionCarrierTag.DLGBRSatisfication = calculate.DLSatisCalGBR(this.m_GBRUserlist, SimulationConstant.MinNumOfGBR); admissionCarrierTag.DLNonGBRSatisfication = calculate.DLSatisCalGBR(this.m_NonGBRUserlist, SimulationConstant.MinNumOfNonGBR); if (SimulationConstant.IS_CACULATE_SQS_SCORE) { admissionCarrierTag.DLVoiceSatisfication = calculate.VoiceSatisCalculateSQS(carrier.DlVoiceWaitUserList); } else { admissionCarrierTag.DLVoiceSatisfication = calculate.DLSatisCalGBR(carrier.DlVoiceWaitUserList, SimulationConstant.MinNumOfVoice); } }
/// <summary> /// 交换服务小区 /// </summary> /// <param name="iSourceCarrier"></param> /// <param name="iTargetCarrier"></param> /// <param name="user"></param> /// <param name="targetCarrierIndex"></param> public void ExchangeServiceCarrier(IAdmissionCarrier iSourceCarrier, IAdmissionCarrier iTargetCarrier, IAdmissionUser user, int targetCarrierIndex) { SimulationUser simulationUser = user as SimulationUser; if (iSourceCarrier.Carrier.ID.Equals(simulationUser.BestServiceCarrier.Carrier.ID)) { simulationUser.CarrierListInComputeArea[0] = simulationUser.CarrierListInComputeArea[targetCarrierIndex]; simulationUser.CarrierListInComputeArea[1] = simulationUser.BestServiceCellBeforeHandOver; if (targetCarrierIndex != 1) { simulationUser.CarrierListInComputeArea[targetCarrierIndex] = simulationUser.StroNbrBeforeHandOver; } } else if (iSourceCarrier.Carrier.ID.Equals(simulationUser.StroNbrBeforeHandOver.Carrier.Carrier.ID)) { simulationUser.CarrierListInComputeArea[0] = simulationUser.CarrierListInComputeArea[targetCarrierIndex]; simulationUser.CarrierListInComputeArea[targetCarrierIndex] = simulationUser.StroNbrBeforeHandOver; } else if (iTargetCarrier.Carrier.ID.Equals(simulationUser.BestServiceCarrier.Carrier.ID)) { int carrierIndex = 0; short iD = simulationUser.StroNbrBeforeHandOver.Carrier.Carrier.ID; this.IsCarrierInUserNgbList(simulationUser, iD, out carrierIndex); simulationUser.CarrierListInComputeArea[carrierIndex] = simulationUser.CarrierListInComputeArea[0]; simulationUser.CarrierListInComputeArea[0] = simulationUser.BestServiceCellBeforeHandOver; simulationUser.CarrierListInComputeArea[1] = simulationUser.StroNbrBeforeHandOver; } else { CarrierTotalLoss loss = simulationUser.CarrierListInComputeArea[targetCarrierIndex]; simulationUser.CarrierListInComputeArea[targetCarrierIndex] = simulationUser.CarrierListInComputeArea[0]; simulationUser.CarrierListInComputeArea[0] = loss; } simulationUser.DlRsrp = simulationUser.CarrierListInComputeArea[0].Carrier.RSPower - SimulationTools.ConvertLineTodB(simulationUser.CarrierListInComputeArea[0].DlTotalLoss); simulationUser.UlRsLevel = ((simulationUser.LTEUser.Terminal.NetTerminalList[0] as LTETerminal).MaxTxPower - SimulationTools.ConvertLineTodB(12f)) - SimulationTools.ConvertLineTodB(simulationUser.CarrierListInComputeArea[0].UlTotalLoss); simulationUser.SfSbStroRsrp = simulationUser.CarrierListInComputeArea[1].Carrier.RSPower - SimulationTools.ConvertLineTodB(simulationUser.CarrierListInComputeArea[1].DlTotalLoss); }
public void CircleUser(IAdmissionCarrier iSourceCarrier, IAdmissionCarrier ngbCarrier, List<ISimulationUser> lbUserList) { List<ISimulationUser> list = new List<ISimulationUser>(); list.AddRange(lbUserList); foreach (ISimulationUser user in list) { IAdmissionUser user2 = user as IAdmissionUser; AdmissionCellTag admissionCarrierTag = iSourceCarrier.AdmissionCarrierTag as AdmissionCellTag; if (admissionCarrierTag.DLHasOutThroughput >= admissionCarrierTag.DLSourceOutThroughput) { break; } AdmissionCellTag tag2 = ngbCarrier.AdmissionCarrierTag as AdmissionCellTag; int carrierIndex = 0; if (base.IsRSRPSatisfy(user, ngbCarrier, out carrierIndex) && this.IsNgbAcceptUser(user2, ngbCarrier)) { this.UpdateInfo(iSourceCarrier, ngbCarrier, user2, carrierIndex); this.UpdateList(iSourceCarrier, ngbCarrier, user); lbUserList.Remove(user); } } }
public override void ProcessWhenGBRNotSatisfy(List<ISimulationUser> gbrUserList, IAdmissionCarrier iAdmissionCarrier) { if (SimulationConstant.IS_SLOW_DOWN_ON) { this.DoSlowDownRate((SimulationCarrier) iAdmissionCarrier); } if (SimulationConstant.IS_REALEASE_USER_ON) { int num = iAdmissionCarrier.DlVoiceWaitUserList.Count + iAdmissionCarrier.DlDataWaitUserList.Count; if (num > iAdmissionCarrier.AlgParameter.DlMaxSchUser) { if (((iAdmissionCarrier as SimulationCarrier).DlGBRRBRatio > base.m_LCThresholdParam.LcGBRRbTh) && SimulationConstant.IS_LIMIT_GBRUSER_RATIO_ON) { base.ReleaseGBRUser(iAdmissionCarrier.DlDataWaitUserList, gbrUserList, iAdmissionCarrier.OffLineUserList); } else { base.ReleaseUser(iAdmissionCarrier.DlVoiceWaitUserList, iAdmissionCarrier.DlDataWaitUserList, iAdmissionCarrier.OffLineUserList); } } } }
/// <summary> /// 计算每个小区的上行服务的满意度 /// </summary> /// <param name="carrier"></param> /// <param name="currentTTI"></param> public void CalculateServiceSatisfy(IAdmissionCarrier carrier, int currentTTI) { this.m_GBRUserlist = new List<ISimulationUser>(); this.m_NonGBRUserlist = new List<ISimulationUser>(); SatisficationCalculate calculate = new SatisficationCalculate(currentTTI, this.m_SatisficationThParam); AdmissionCellTag admissionCarrierTag = carrier.AdmissionCarrierTag as AdmissionCellTag; calculate.GetUsers(carrier.UlDataWaitUserList, this.m_GBRUserlist, this.m_NonGBRUserlist); //计算小区的上行数据用户的整体满意度 admissionCarrierTag.ULGBRSatisfication = calculate.ULSatisCalGBR(this.m_GBRUserlist, SimulationConstant.MinNumOfGBR); admissionCarrierTag.ULNonGBRSatisfication = calculate.ULSatisCalGBR(this.m_NonGBRUserlist, SimulationConstant.MinNumOfNonGBR); //SQS_SCORE这是一个什么score,SimulationConstant.IS_CACULATE_SQS_SCORE这个参数从哪读的,暂时设为true //计算小区的上行voice用户的整体满意度 if (true)//SimulationConstant.IS_CACULATE_SQS_SCORE) { admissionCarrierTag.ULVoiceSatisfication = calculate.VoiceSatisCalculateSQS(carrier.UlVoiceWaitUserList); } else { admissionCarrierTag.ULVoiceSatisfication = calculate.ULSatisCalGBR(carrier.UlVoiceWaitUserList, SimulationConstant.MinNumOfVoice); } }
/// <summary> /// 负载控制 /// </summary> /// <param name="currentTTI"></param> /// <param name="iAdmissionCarrier"></param> private void LoadControl(int currentTTI, IAdmissionCarrier iAdmissionCarrier) { bool a=(iAdmissionCarrier.DlActualLoad > (iAdmissionCarrier.Carrier.UlTargetLoad * SimulationConstant.LCRatioTh)); bool b=(((currentTTI - this.m_LCTHresholdParam.FirstLCTime) % this.m_LCTHresholdParam.LcPeriod) == 0); bool c=SimulationConstant.IS_LOAD_CONTROL_ON; if ((true && a) && ((currentTTI >= this.m_LCTHresholdParam.FirstLCTime) &&b )) { new UlLoadControlService(currentTTI, this.m_LCTHresholdParam, this.m_SatisficationThParam).LoadControlProcess(iAdmissionCarrier); } }
public bool IsNgbSatisAcceptUser(IAdmissionCarrier carrier) { AdmissionCellTag admissionCarrierTag = carrier.AdmissionCarrierTag as AdmissionCellTag; return (((admissionCarrierTag.ULVoiceSatisfication > SimulationConstant.LBVoiceSatisfyTh) && (admissionCarrierTag.ULGBRSatisfication > SimulationConstant.LBGBRSatisfyTh)) && (admissionCarrierTag.ULNonGBRSatisfication > SimulationConstant.LBNonGBRSatisfyTh)); }
//获得载波的邻区列表,若没有IntraNeighbours和InterNeighbours则为计算区域内的载波,否者为IntraNeighbours和InterNeighbours中所有LTE载波 public List<ISimulationCarrier> GetNgbList(IAdmissionCarrier iLoadBalanceCarrier, List<ISimulationCarrier> allSimulationCarrierlist) { List<ISimulationCarrier> list = new List<ISimulationCarrier>(); //如果小区的邻小区列表为空,则把该小区的计算区域内的小区算作他的邻小区(邻小区就是从CarrierListInComputeArea挑出来的) if ((iLoadBalanceCarrier.Carrier.IntraNeighbours.Count == 0) && (iLoadBalanceCarrier.Carrier.InterNeighbours.Count == 0)) { SimulationCarrier carrier = iLoadBalanceCarrier as SimulationCarrier; list.AddRange(carrier.CarrierListInComputeArea); return list; } list.AddRange(this.GetNgbFromPlan(iLoadBalanceCarrier, allSimulationCarrierlist)); return list; }
public abstract bool IsNgbAcceptUser(IAdmissionUser user, IAdmissionCarrier carrier);
/// <summary> /// 更新原小区和目标小区的list,完成用户的切换 /// </summary> /// <param name="iSourceCarrier"></param> /// <param name="iTargetCarrier"></param> /// <param name="user"></param> public void UpdateList(IAdmissionCarrier iSourceCarrier, IAdmissionCarrier iTargetCarrier, ISimulationUser user) { if ((user.LTEUser.Service as UnionPsService).Type == ServiceType.Voice) { iTargetCarrier.UlUserList.Add(user); iTargetCarrier.ULHandOverVoiceUserList.Add(user); iSourceCarrier.UlUserList.Remove(user); iSourceCarrier.UlVoiceWaitUserList.Remove(user); } else { iTargetCarrier.UlUserList.Add(user); iTargetCarrier.ULHandOverDataUserList.Add(user); iSourceCarrier.UlUserList.Remove(user); iSourceCarrier.UlDataWaitUserList.Remove(user); } }
/// <summary> /// 更新信息 /// </summary> /// <param name="iSourceCarrier"></param> /// <param name="iTargetCarrier"></param> /// <param name="user"></param> /// <param name="carrierIndex"></param> public void UpdateInfo(IAdmissionCarrier iSourceCarrier, IAdmissionCarrier iTargetCarrier, IAdmissionUser user, int carrierIndex) { iSourceCarrier.IsULLoadBalance = true; iTargetCarrier.IsULLoadBalance = true; SimulationUser simUser = user as SimulationUser; SimulationCarrier targetCarrier = iTargetCarrier as SimulationCarrier; CarrierTotalLoss loss = simUser.CarrierListInComputeArea[0]; base.ExchangeServiceCarrier(iSourceCarrier, iTargetCarrier, user, carrierIndex); if (iTargetCarrier.Carrier.ID == simUser.BestServiceCarrier.Carrier.ID) { simUser.IsEdgeUser = simUser.IsEdgeUserBeforeHandOver; } else { simUser.IsEdgeUser = true; } AdmissionCellTag admissionSourceCarrierTag = iSourceCarrier.AdmissionCarrierTag as AdmissionCellTag; AdmissionCellTag targetCarrierTag = iTargetCarrier.AdmissionCarrierTag as AdmissionCellTag; if (user.ServiceCount == 0) { admissionSourceCarrierTag.ULHasOutThroughput += user.UlMacMinThroughputDemand; targetCarrierTag.ULAcceptHOThroughput += user.UlMacMinThroughputDemand; } else { admissionSourceCarrierTag.ULHasOutThroughput += simUser.ActualAvgBr; targetCarrierTag.ULAcceptHOThroughput += simUser.ActualAvgBr; } targetCarrierTag.ULAvailableHOThroughput = targetCarrierTag.ULTotalHOThroughput - targetCarrierTag.ULAcceptHOThroughput; base.UpdateHOUserInfo(simUser, base.m_CurrentTTI); }
/// <summary> /// 判断该用户对该小区的参考信号的接收功率是否满意 /// </summary> /// <param name="user"></param> /// <param name="carrier"></param> /// <param name="carrierIndex"></param> /// <returns></returns> public bool IsRSRPSatisfy(ISimulationUser user, IAdmissionCarrier carrier, out int carrierIndex) { carrierIndex = 0; SimulationUser simulationUser = user as SimulationUser; if (this.IsCarrierInUserNgbList(simulationUser, carrier.Carrier.ID, out carrierIndex)) { float dlRSRP = carrier.RSPower - SimulationTools.ConvertLineTodB(simulationUser.CarrierListInComputeArea[carrierIndex].DlTotalLoss); float uLRSRP = ((simulationUser.LTEUser.Terminal.NetTerminalList[0] as LTETerminal).MaxTxPower - SimulationTools.ConvertLineTodB(12f)) - SimulationTools.ConvertLineTodB(simulationUser.CarrierListInComputeArea[carrierIndex].UlTotalLoss); bool isDlRSRPOK = dlRSRP >= SimulationConstant.DLRSRP_ACCESS_THRESHOLD; bool isUlRSRPOK = uLRSRP >= SimulationConstant.ULRSRP_ACCESS_THRESHOLD; return (isDlRSRPOK && isUlRSRPOK); } return false; }
public void MyTestInitialize() { m_DlHOService = new DlHandOverService(m_CurretTti,m_Sfth ); m_ISourceCarrier = new SimulationCarrier(); m_ITargetCarrier = new SimulationCarrier(); m_NgbCaiirer = new SimulationCarrier(); m_Carrier = new SimulationCarrier(); m_User = new SimulationUser(); m_User.LTEUser = new User(); Service serv = new UnionPsService(); m_User.LTEUser.Service = serv; m_NgbCarrierList = new List<ISimulationCarrier>(); m_ISourceCarrier.AdmissionCarrierTag = new AdmissionCellTag(); AdmissionCellTag adCellTag = m_ISourceCarrier.AdmissionCarrierTag as AdmissionCellTag; adCellTag.ULSourceOutThroughput = 100; m_Carrier.AdmissionCarrierTag = new AdmissionCellTag(); m_NgbCaiirer.AdmissionCarrierTag = new AdmissionCellTag(); AdmissionCellTag ngbCellTag = m_NgbCaiirer.AdmissionCarrierTag as AdmissionCellTag; ngbCellTag.ULTotalHOThroughput = 50; SimulationCarrier temp = m_NgbCaiirer as SimulationCarrier; temp.Carrier = new LTECell(); m_LbUserList = new List<ISimulationUser>(); SimulationUser user1 = new SimulationUser(); SimulationUser user2 = new SimulationUser(); m_LbUserList.Add(user1); m_LbUserList.Add(user2); m_NgbCarrierList.Add(m_NgbCaiirer); m_DlHOVoiceUserList = new List<ISimulationUser>(); SimulationUser VUser1 = new SimulationUser(); SimulationUser VUser2 = new SimulationUser(); m_DlHOVoiceUserList.Add(VUser1); m_DlHOVoiceUserList.Add(VUser2); CarrierTotalLoss a=new CarrierTotalLoss (); SimulationCarrier carrier = new SimulationCarrier(); carrier.IsLTECell = true; LTECell lteCell = new LTECell(); lteCell.RSPower = 15f; carrier.Carrier = lteCell; CarrierTotalLoss b = new CarrierTotalLoss(carrier, 100f, 100f); //SimulationCarrier carrier1 = new SimulationCarrier(); //b.Carrier = carrier1; List<CarrierTotalLoss> listCarrier = new List<CarrierTotalLoss>(); listCarrier.Add(a); listCarrier.Add(b); a.Carrier = new SimulationCarrier(); carrier.IsLTECell = false; RelayCell relayCell1 = new RelayCell(); relayCell1.RSPower = 16f; a.Carrier.Carrier = relayCell1; b.Carrier = new SimulationCarrier(); carrier.IsLTECell = false; RelayCell relayCell2 = new RelayCell(); relayCell1.RSPower = 17f; b.Carrier.Carrier = relayCell2; m_User.BestServiceCellBeforeHandOver = a; m_User.StroNbrBeforeHandOver = b; user1.BestServiceCellBeforeHandOver = a; user1.StroNbrBeforeHandOver = b; user2.BestServiceCellBeforeHandOver = a; user2.StroNbrBeforeHandOver = b; user1.CarrierListInComputeArea = listCarrier.ToArray(); user2.CarrierListInComputeArea = listCarrier.ToArray(); m_User.CarrierListInComputeArea = listCarrier.ToArray(); List<ISimulationUser> list = new List<ISimulationUser>(); list.AddRange(m_LbUserList); RelayCell relaycarrier = new RelayCell(); ((SimulationCarrier)m_NgbCaiirer).Carrier = relaycarrier; ((SimulationCarrier)m_ISourceCarrier).Carrier = relaycarrier; ((SimulationCarrier)m_ITargetCarrier).Carrier = relaycarrier; user1.CarrierListInComputeArea[0].Carrier = carrier; user1.CarrierListInComputeArea[0].Carrier.Carrier = relaycarrier; user2.CarrierListInComputeArea[0].Carrier = carrier; user2.CarrierListInComputeArea[0].Carrier.Carrier = relaycarrier; m_User.CarrierListInComputeArea[0].Carrier = carrier; m_User.CarrierListInComputeArea[0].Carrier.Carrier = relaycarrier; user1.CarrierListInComputeArea[1].Carrier = carrier; user1.CarrierListInComputeArea[1].Carrier.Carrier = relaycarrier; user2.CarrierListInComputeArea[1].Carrier = carrier; user2.CarrierListInComputeArea[1].Carrier.Carrier = relaycarrier; m_User.CarrierListInComputeArea[1].Carrier = carrier; m_User.CarrierListInComputeArea[1].Carrier.Carrier = relaycarrier; //m_User.StroNbrBeforeHandOver.Carrier = carrier; relaycarrier.RSPower = 100; //m_User.StroNbrBeforeHandOver.Carrier = carrier; //m_User.BestServiceCellBeforeHandOver.Carrier = carrier; Huawei.UNet.Traffic.Map.Interface.User lteuser = new Huawei.UNet.Traffic.Map.Interface.User(); user1.LTEUser = lteuser; user1.ID = 1; Huawei.UNet.Traffic.Interface.Terminal terminal = new Huawei.UNet.Traffic.Interface.Terminal(); user1.LTEUser.Terminal = terminal; List<Huawei.UNet.Traffic.Interface.NetworkTerminal> netterminallist = new List<NetworkTerminal>(); NetworkTerminal networkTerminal = new NetworkTerminal(); LTETerminal lteterminal = new LTETerminal(); netterminallist.Add(lteterminal); user1.LTEUser.Terminal.NetTerminalList = netterminallist; user1.LTEUser.Service = new Huawei.UNet.Traffic.Interface.UnionPsService(); ((Huawei.UNet.Traffic.Interface.UnionPsService)(user1.LTEUser.Service)).PSServiceDic = new Dictionary<Huawei.UNet.Frame.Interface.NetWorkType, Huawei.UNet.Traffic.Interface.Service>(); ((Huawei.UNet.Traffic.Interface.UnionPsService)(user1.LTEUser.Service)).PSServiceDic.Add(NetWorkType.LTE, new Huawei.UNet.Traffic.LTEModel.LTEService()); user2.LTEUser = lteuser; user2.LTEUser.Terminal = terminal; user2.ID = 2; netterminallist.Add(lteterminal); user2.LTEUser.Terminal.NetTerminalList = netterminallist; user2.LTEUser.Service = new Huawei.UNet.Traffic.Interface.UnionPsService(); ((Huawei.UNet.Traffic.Interface.UnionPsService)(user2.LTEUser.Service)).PSServiceDic = new Dictionary<Huawei.UNet.Frame.Interface.NetWorkType, Huawei.UNet.Traffic.Interface.Service>(); ((Huawei.UNet.Traffic.Interface.UnionPsService)(user2.LTEUser.Service)).PSServiceDic.Add(NetWorkType.LTE, new Huawei.UNet.Traffic.LTEModel.LTEService()); m_User.LTEUser = lteuser; m_User.ID = 0; m_User.LTEUser.Terminal = terminal; netterminallist.Add(lteterminal); m_User.LTEUser.Terminal.NetTerminalList = netterminallist; m_User.LTEUser.Service = new Huawei.UNet.Traffic.Interface.UnionPsService(); ((Huawei.UNet.Traffic.Interface.UnionPsService)(m_User.LTEUser.Service)).PSServiceDic = new Dictionary<Huawei.UNet.Frame.Interface.NetWorkType, Huawei.UNet.Traffic.Interface.Service>(); ((Huawei.UNet.Traffic.Interface.UnionPsService)(m_User.LTEUser.Service)).PSServiceDic.Add(NetWorkType.LTE, new Huawei.UNet.Traffic.LTEModel.LTEService()); //Service service = new Service(); //UnionPsService psservice = SimulationTools.GetUnionPsService(service); //psservice.DlOffset = 0; //psservice.DlTxEff = 1; //psservice.DlMinThroughputDemand = 0; //user1.LTEUser.Service = psservice; }
private void LoadBanlance(List<ISimulationCarrier> iSimulationCarrierList, int currentTTI, IAdmissionCarrier iAdmissionCarrier) { if (SimulationConstant.IS_LOAD_BANLANCE_ON && ((currentTTI >= this.m_LBThresholdParam.FirstLbTime) && (((currentTTI - this.m_LBThresholdParam.FirstLbTime) % this.m_LBThresholdParam.LbPeriod) == 0))) { new DlLoadBalancingService(currentTTI, this.m_LBThresholdParam).LoadBalanceingProcess(iAdmissionCarrier, iSimulationCarrierList); } }
public abstract void ProcessWhenGBRSatisfy(List<ISimulationUser> gbrUserList, IAdmissionCarrier iAdmissionCarrier);
private void LoadControl(int currentTTI, IAdmissionCarrier iAdmissionCarrier) { if (SimulationConstant.IS_LOAD_CONTROL_ON && ((currentTTI >= this.m_LCTHresholdParam.FirstLCTime) && (((currentTTI - this.m_LCTHresholdParam.FirstLCTime) % this.m_LCTHresholdParam.LcPeriod) == 0))) { new DlLoadControlService(currentTTI, this.m_LCTHresholdParam, this.m_SatisficationThParam).LoadControlProcess(iAdmissionCarrier); } }
private int CalculateUlUserNum(IAdmissionCarrier iAdmissionCarrier) { return (iAdmissionCarrier.UlDataWaitUserList.Count + iAdmissionCarrier.UlVoiceWaitUserList.Count); }
public abstract void LoadControlProcess(IAdmissionCarrier iLoadControlCarrier);