吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1843|回复: 2
收起左侧

[Python 原创] python-论文学习-基于元胞的企业负面口碑传播模型

[复制链接]
知意执意 发表于 2020-2-20 11:09


用到的库:
[Python] 纯文本查看 复制代码
import time
import networkx as nx             #导入复杂网络分析库
import matplotlib.pyplot as plt   #导入科学绘图库
import random
import numpy as np

plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号


获取多次结果平均值函数,以机事件按概率发生函数:
[Python] 纯文本查看 复制代码
def getAv(li):
    new = []
    for i in range(len(li[0])):
        n = 0
        for j in range(len(li)):
            n += li[j][i]
        new.append(round(n/len(li),3))

    return(new)

#概率事件
def ran_happen(p):
    n = random.random()
    if n < p:
        return(1)
    else:
        return(0)


异质元胞自动机 (HCA) 的负面口碑扩散模型类:
[Python] 纯文本查看 复制代码
class HCA(object):
    def __init__(self,h,l,Vc,Va,Vb,Vy,Vo):
        super(HCA, self).__init__()
        self.h = h     #行
        self.l = l     #列
        self.Vc = Vc   #初期抱怨比例
        self.Va = Va   #易感转化抱怨概率
        self.Vb = Vb   #负面口碑传播概率
        self.Vy = Vy   #二次负面概率
        self.Vo = Vo   #负面口碑解除概率

        self.cell = np.random.randint(0,1,size=(self.h,self.l))
        for i in range(self.h):
            for j in range(self.l):
                if ran_happen(self.Vc):
                    self.cell[i][j] = 1   #0易感  1抱怨  2康复

    def lin(self,i,j):  #元胞邻域历遍
        ii = [i-1,i-1,i-1,  i,  i,i+1,i+1,i+1]
        jj = [j-1,  j,j+1,j-1,j+1,j-1,  j,j+1]
        for x in range(len(ii)):
                if ii[x] < self.h and ii[x] >= 0:
                    if jj[x] < self.l and jj[x] >= 0:
                        if self.cell[ii[x]][jj[x]] == 0:
                            if ran_happen(self.Vb):
                                self.cell[ii[x]][jj[x]] = 1
                        if self.cell[ii[x]][jj[x]] == 2:
                            if ran_happen(self.Vy):
                                self.cell[ii[x]][jj[x]] = 1

    def process(self):  #每一步
        num = 0
        for i in range(self.h):
            for j in range(self.l):
                if self.cell[i][j] == 0:    
                    if ran_happen(self.Va):
                        self.cell[i][j] = 1

                elif self.cell[i][j] == 1:
                    num += 1
                    self.lin(i,j)
                    if ran_happen(self.Vo):
                        self.cell[i][j] = 2

                else:
                    if ran_happen(self.Vy):
                        self.cell[i][j] = 1
        return(num)


主函数:
[Python] 纯文本查看 复制代码
def main(Vc):
    ZN = []
    ZNN = []
    for j in range(2):
        hh = HCA(128,128,Vc,0.05,0.1,0.1,0.5)
        N = []
        NN = []
        old = 0
        for i in range(20):
            n = hh.process()
            N.append(round(n/(128*128),3))
            NN.append(round((n-old)/(128*128),3))
            old = n

        ZN.append(N)
        ZNN.append(NN)  
    return(getAv(ZN),getAv(ZNN)) 


绘图代码:
[Python] 纯文本查看 复制代码
if __name__ == '__main__':
    ZNav = []
    ZNNav = []
    for i in range(4):
        Vc = round((i+1)*0.05,2)
        print('初始抱怨比例:%s'%Vc)
        nav,nnav = main(Vc)
        ZNav.append(nav)
        ZNNav.append(nnav)



    plt.figure(figsize=(12,5), dpi=100)
    plt.figure(1)

    ax1 = plt.subplot(121)
    xx = np.arange(0,20,1)
    plt.plot(xx,ZNav[0],'-',label='5%')
    plt.plot(xx,ZNav[1],'-.',label='10%')
    plt.plot(xx,ZNav[2],'--',label='15%')
    plt.plot(xx,ZNav[3],'--.',label='20%')
    xt = np.arange(0,20,5) 
    yt = np.arange(0,0.7,0.1) 
    plt.xticks(xt) # 这里传入的x就是x轴的列表
    plt.yticks(yt) # 这里传入的x就是x轴的列表
    plt.xlabel('stage')
    plt.ylabel('Percent of I')
    plt.legend()

    ax1 = plt.subplot(122)
    plt.plot(xx,ZNNav[0],'-',label='5%')
    plt.plot(xx,ZNNav[1],'-.',label='10%')
    plt.plot(xx,ZNNav[2],'--',label='15%')
    plt.plot(xx,ZNNav[3],'--.',label='20%')
    xt = np.arange(0,20,5) 
    yt = np.arange(-0.05,0.3,0.05) 
    plt.xticks(xt) # 这里传入的x就是x轴的列表
    plt.yticks(yt) # 这里传入的x就是x轴的列表
    plt.xlabel('stage')
    plt.ylabel('Rate of I')
    plt.legend()

    #保存图表
    print('图表保存')
    plt.savefig("./图4.png")
    #显示图表
    plt.show()


图4.png

附件解压密码:www.52pojie.cn

企业负面口碑扩散.zip

501.9 KB, 下载次数: 8, 下载积分: 吾爱币 -1 CB

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

sghzlx 发表于 2020-2-20 11:15
不错,学习一下
少林大虾 发表于 2020-2-20 11:51
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 21:57

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表