Skip to content

Commit b6a9eb9

Browse files
committed
5.12
5.12
1 parent 36b5f72 commit b6a9eb9

File tree

2 files changed

+46
-10
lines changed

2 files changed

+46
-10
lines changed

CAPalloction.py

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ def userAllocatedChanNum(chanlist,user):
233233
##-----------------------------定 义 求 信 道 分 配 的 函 数 ----------------------------------------------
234234

235235
@pro
236-
# @profile
236+
237237
def channelAllocate(BSCover,bsx,bsy):
238238
"""
239239
BSCover:用户分类的列表,bsx,bsy表示的是基站的坐标()这个坐标必须包括宏基站坐标
@@ -317,15 +317,47 @@ def channelAllocate(BSCover,bsx,bsy):
317317
indexD = newDL.index(temp)
318318
if BSchanAllocate[indexD].count(-1)>0:##新基站有空余信道
319319
BSCover[indexD].append(userset)
320-
channelAllocate(BSCover[indexD:], bsx[indexD:], bsy[indexD:])###递归信道分配,从追加用户的基站开始重新分配
320+
channelAllocate(BSCover[:], bsx[:], bsy[:])###递归信道分配,从追加用户的基站开始重新分配
321321
else:
322322
print "All channels are busy"
323323
exit(0)
324324
except:
325325
print "Error"
326326
return BSchanAllocate
327+
#------------------------------产 生 随 机 功 率 矩 阵 的 函 数 -----------------------------
328+
def getPower(chanlist):
329+
'''
330+
此函数的功能是根据基站信道的分配列表,得到信道的功率分配矩阵。值得注意的是:初始条件下信道的分配是基站的平均功率
331+
按照在瓶平均功率条件下的信道分配方案,调整信道功率的大小,会得到一系列的初始化粒子,保证每个基站的信道功率和不能超过此基站的总功率
332+
产生 num 个初始化粒子
333+
'''
334+
p = [[0 for i in xrange(len(chanlist[j]))] for j in xrange(len(chanlist))]#初始化一个全为0的功率分配矩阵
335+
for i in xrange(len(chanlist)):##以基站个数做循环
336+
if i!=len(chanlist)-1:#不是最后一个基站,功率为1.0W;最后一个基站是宏基站,功率为20.0W
337+
ptotal = 1.0
338+
else:
339+
ptotal = 20.0
340+
if chanlist[i].count(-1) < len(chanlist[i]):##如果基站存在信道分配
341+
for j in xrange(len(chanlist[i])):
342+
343+
k = len(chanlist[i]) - chanlist[i].count(-1)##刺激站分配的信道数量
344+
##为存在信道分配的位置随机分配一个随机功率值
345+
if chanlist[i][j]!=-1:
346+
# wp = uniform(0.001,ptotal/k)##每个信道功率最多分配ptotal/k,这样有点不合理
347+
wp = uniform(0.001,ptotal)
348+
if (sum(p[i])<ptotal):
349+
p[i][j] = wp
350+
elif(sum(p[i]==ptotal)):
351+
pass
352+
else:
353+
pass
354+
355+
356+
return p
357+
327358

328359

360+
#------------------------------主 函 数 ---------------------------------------
329361
if __name__=="__main__":
330362

331363
BSCover = classifyUser(r=100)
@@ -351,6 +383,8 @@ def channelAllocate(BSCover,bsx,bsy):
351383
# for i in xrange(len(An_k_s)):
352384
# print An_k_s[i]
353385

354-
355-
356-
386+
##既然信道分配已经确定了,那么平均功率所组成的一个粒子可以算作一个初始化粒子,然后针对这些已经分配信道的的用户的信道功率多做几次(20次)功率随机分配,就会产生许多不同的初始化
387+
print "\n"
388+
p = getPower(BSchanAllocate)
389+
for i in p:
390+
print i

pso.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ def __init__(self, speed, position, fit, lBestPosition, lBestFit):
1919
self.lBestFit = lBestFit
2020
self.lBestPosition = lBestPosition
2121

22-
2322
#----------------------PSO参数设置---------------------------------
2423
class PSO():
2524

@@ -40,19 +39,20 @@ def __init__(self,pN,dim,max_iter):
4039
self.fit = 1e10 #全局最佳适应值
4140

4241
#---------------------目标函数Sphere函数-----------------------------
43-
def function(self,x):
42+
def function(self,x): #x是列表
4443
sum = 0
4544
length = len(x)
4645
x = x**2
4746
for i in range(length):
4847
sum += x[i]
4948
return sum
49+
5050
#---------------------初始化种群----------------------------------
5151
def init_Population(self):
5252
for i in range(self.pN):
5353
for j in range(self.dim):
54-
self.X[i][j] = random.uniform(0,1)
55-
self.V[i][j] = random.uniform(0,1)
54+
self.X[i][j] = random.uniform(0,1) #初始化种群的位置
55+
self.V[i][j] = random.uniform(0,1) #初始化种群的速度
5656
self.pbest[i] = self.X[i]
5757
tmp = self.function(self.X[i])
5858
self.p_fit[i] = tmp
@@ -79,11 +79,13 @@ def iterator(self):
7979
fitness.append(self.fit)
8080
print(self.fit) #输出最优值
8181
return fitness
82+
8283
#----------------------程序执行-----------------------
8384
my_pso = PSO(pN=30,dim=5,max_iter=100)
8485
my_pso.init_Population()
8586
fitness = my_pso.iterator()
86-
#-------------------画图--------------------
87+
88+
#----------------------画 图--------------------------
8789
plt.figure(1)
8890
plt.title("Figure1")
8991
plt.xlabel("iterators", size=14)

0 commit comments

Comments
 (0)