影响力最大化 模拟爆发(粗糙笔记)

以前写过的一些影响力最大化问题的文章:

影响力最大化 IC模型+贪心算法
影响力最大化 模拟爆发(粗糙笔记)
影响力最大化 IC 蒙特卡洛模拟 贪心算法
影响力最大化 IMRank 我心中的最优算法
影响力最大化 CELF 成本效益延迟转发算法

这里做一下记录,不是想要讲解什么,怕以后自己会忘记,所以写的很粗糙,但是我别的blog还是很用心的。哈哈

大家共勉~~~

import random
from time import time


NUM_MC_ROUNDS = 100  # 可修改


class SimuGreedy:
    def __init__(self):
        with open("graph.txt", "r") as file:
            self.graph = [[float(x) for x in line.split()] for line in file]
        self.num_vert = len(self.graph)
        self.status = [0 for _ in range(self.num_vert)]
        self.seed_set = []
        print('Graph with {0} vertices has been loaded.'.format(self.num_vert))
        print('Number of rounds in single Monte Carlo simulation: {0}'.format(NUM_MC_ROUNDS))

    def get_seed_set(self):
        tic = time()
        while True:
            max_val = max_id = 0
            for idx, state in enumerate(self.status):
                if state == 0:
                    # print('evaluating V{0}'.format(idx))
                    val = self.simulate_influence(idx)
                    # print('V{0}: {0}'.format(idx, val))
                    if val > max_val:
                        max_val = val
                        max_id = idx
            self.seed_set.append(max_id)
            self.status[max_id] = 1

            # if max_val >= self.num_vert:
            if len(self.seed_set) == 5:
                break
            else:
                print('Current expected #influenced: {0}, {1}-element seed set: {2}'.format(
                    max_val, len(self.seed_set), self.seed_set
                ))
        return self.seed_set, time() - tic

    def simulate_influence(self, vert_id):
        test_seed_set = [seed for seed in self.seed_set]
        test_seed_set.append(vert_id)

        cnt = 0
        for _ in range(NUM_MC_ROUNDS):
            live_set = [seed for seed in test_seed_set]
            newly_influenced_set = []
            temp_status = [s for s in self.status]
            temp_status[vert_id] = 1
            cnt += len(test_seed_set)
            while True:
                for idx, state in enumerate(temp_status):
                    if state == 0:
                        prob_not_influenced = 1.
                        for live in live_set:
                            prob_not_influenced *= 1 - self.graph[live][idx]
                        prob_influenced = 1 - prob_not_influenced
                        if prob_influenced >= self.get_rand():
                            temp_status[idx] = 1
                            newly_influenced_set.append(idx)
                if len(newly_influenced_set) == 0:
                    break
                cnt += len(newly_influenced_set)
                live_set = [inf for inf in newly_influenced_set]
                newly_influenced_set = []
        return cnt / NUM_MC_ROUNDS

    @staticmethod
    def get_rand():
        return random.uniform(0, 1)


if __name__ == '__main__':
    seed_set, time_cost = SimuGreedy().get_seed_set()

    print('--------------')
    print('Time cost: {0} s'.format(time_cost))
    print('Final indexes of vertices in {0}-element seed set:'.format(len(seed_set)))
    print(seed_set)

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 模拟电子技术是电子工程中的基础课程之一,通过这门课程的学习,可以帮助我们深入理解和掌握模拟电路的原理、设计方法和分析技巧。在学习过程中,笔记pdf是非常重要的工具之一,它可以帮助我们记录下学习的重点、难点和思考,同时也方便我们进行复习和整理。 在编写模拟电子技术笔记pdf时,需要注意以下几点: 1. 细节要准确。在记录笔记时,应该注意每个公式、符号、图形等的准确性,尽量避免错误和歧义。同时,应该把注意力放在重点和难点上,多记录一些解题思路和分析方法。 2. 结构要清晰。笔记pdf的结构应该清晰,可以按照章节、主题、难度等分段,以便于我们进行复习和查找。同时,应该通过分段、标题、关键词等方式,使笔记的结构更加清晰。 3. 表达要清晰。在编写笔记pdf时,应该注意表达的清晰度和易懂性,尽量避免过于复杂和晦涩。同时,可以通过画图、示例等方式,使笔记更加生动有趣,方便我们理解和记忆。 总之,模拟电子技术笔记pdf是我们学习和掌握模拟电路的重要工具之一,我们应该把笔记看作是一个学习和思考的过程,不断完善和拓展它,以便于我们更好地掌握和应用模拟电子技术。 ### 回答2: 模拟电子技术是电子工程学科的一个重要分支,它是研究连续电信号的产生、处理与传输的学科。模拟电子技术应用广泛,包括放大器、滤波器、发生器、稳压器、振荡器等电路。在现代电子学中,虽然数字电子技术得到了广泛应用,但模拟电子技术仍然是不可或缺的部分。这是因为,有些电信号是连续的,而数字技术是离散的,因此模拟电子技术有着很重要的作用。笔记pdf是模拟电子技术学习的重要资料之一。它可以帮助学生在自学或复习时更加便利,完善自己的知识体系。 笔记pdf包括了模拟电子技术的基本概念、原理和电路设计方法等方面的内容。通过阅读笔记pdf,学生们可以快速、深入地理解和掌握模拟电子技术的基础知识。同时,笔记pdf中包含了很多实用的例子和实验内容,帮助学生深入理解和学习这门学科。此外,笔记pdf还包括了一些题目和答案,帮助学生巩固所学知识,提高应用能力。总之,笔记pdf是学习模拟电子技术不可或缺的辅助资料,它能够帮助学生更好地学习和掌握这门学科的相关知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值