Skip to content

Commit e29b490

Browse files
committed
Merge branch 'pyprojects' of https://github.com/grasscoder/pyprojects into pyprojects
# Conflicts: # CAPalloction.py
2 parents a5a3381 + e3f1202 commit e29b490

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed

CAPalloction.py

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ def interfere(n,s,chanlist,BSX,BSY):
143143
def channelAllocate(BSCover):
144144
"""
145145
146+
<<<<<<< HEAD
146147
"""
147148
BSchanAllocate = [[-1]*channelnum]*TotalNum ####定义一个信道分配的矩阵,行代表一个基站,列代表基站的信道
148149
n = 0##由于list会出现多个相同值(基站范围内不一定总是存在用户)取下标得到第一此出现的值,故循环n,作为全局的控制变量
@@ -218,4 +219,73 @@ def channelAllocate(BSCover):
218219
for i in BSchanAllocate:
219220
print i
220221

222+
=======
223+
if len(bs) > 0 : ##判断bs中如果有用户的话,且不是最有一个基站,最后一个基站是宏基站
224+
##初始化计算基站信息的数据
225+
if n!=(len(BSCover)-1):
226+
pt = microAveragePower###微基站的平均信道功率
227+
P = picoPower ##基站总共功率
228+
radius = 100##m
229+
else:
230+
pt = macroAveragePower##宏基站的平均信道功率
231+
P = macroPower
232+
radius = 500##m
233+
# Interf = 0 ##干扰
234+
AvgBand = channelbandwidth##每个信道的平均带宽
235+
236+
##求当前基站范围内的用户与当前基站的距离
237+
D = []
238+
for useri in bs:#循环当前基站中用户数量次
239+
d = distance(useri[0],useri[1],BSX[n],BSY[n])
240+
D.append(d)##得到当前基站下的用户与当前基站距离的列表
241+
242+
##利用循环求当前基站下:每一个用户与所有信道连接条件下可获得的用户速率
243+
R = []#初始化一个速度矩阵,一行代表当前基站下用户与所有信道的链接所获得速率值列表,列代表信道
244+
for user in bs:
245+
# R = []#初始化一个速度列表,当前循环的基站下覆盖的各个用户:假设信道分配给每一个用户的情形下得到的速率
246+
r = []
247+
for j in xrange(channelnum):
248+
'''这样做会出现一个问题:当前用户对应基站的所有信道得到的速率值是一样的,因功率是平均功率,距离是固定的,刚开始分配时先分配的基站不存在干扰,
249+
后续分配的基站产生干扰,因此得到的速率矩阵的每一行都是由相同的值组成的'''
250+
Interf = interfere(n, j, BSchanAllocate, BSX, BSY)##n表示的是基站,j 是信道,chanlist是信道分配的列表
251+
sinr = pt*(D[bs.index(user)])**(-4)/(Interf + P*radius**(-4)/alpha)##求sinr
252+
rate = AvgBand*log2(1+sinr)
253+
##将得到的速率值r,追加到当前 用户速度一维列表中,
254+
#每一个速率值对应一个信道:R =[r0,r1,r2,..]
255+
r.append(rate)
256+
R.append(r)
257+
# print R
258+
# print len(R[0])
259+
260+
##下一步进行信道的分配,使用的贪心算法,用户选择(或者说基站分配)当前速率值最大的信道
261+
262+
for userj in bs:
263+
j = bs.index(userj)##获取当前用户的下标(用户坐标不会存在重复)
264+
265+
Rnow=0##表示用户当下的速率,这样做是有问题的!!!!???????
266+
while(Rnow < Rmin):##用户速率大于最低速率,
267+
if BSchanAllocate[n].count(-1)>0:#当前基站还有未分配的信道
268+
269+
Rnow += max(R[j])
270+
chanid = R[j].index(max(R[j]))##将当前用户速率值最大值对应的第一个(可能会出现速率并列最大的)信道标号赋值给chanid
271+
BSchanAllocate[n][chanid]=userj##在基站n的信道s对应位置写入用户坐标
272+
for rm in xrange(len(R)):##循环速率矩阵行
273+
#row = R.index(rm)#获取行坐标
274+
for rn in xrange(len(R[j])):
275+
# col = rm.index(rn)##获取列坐标
276+
if (rm!=j and rn!=chanid):R[rm][rn]=0
277+
278+
else:
279+
print "All channels are busy"
280+
exit(0)
281+
n=n+1
282+
283+
284+
if __name__=="__main__":
285+
print "\n"
286+
for i in BSchanAllocate:
287+
print i
288+
289+
print len(BSchanAllocate[0])-BSchanAllocate[0].count(-1)
290+
>>>>>>> e3f12020d4e3a98ad90a9ce41a00f670cd5f2fc8
221291

0 commit comments

Comments
 (0)