Python:爬山法/随机重启爬山法/允许侧移的爬山法解决八皇后问题

article/2025/11/10 12:55:40

文章目录

  • 1 八皇后问题
  • 2 程序代码
    • 2.1 程序1
    • 2.2 程序2
    • 2.3 程序3
      • 2.3.1 爬山法
      • 2.3.2 随机重启爬山法
      • 2.3.3 允许皇后侧移的爬山法
  • 3 评价


1 八皇后问题

有一个8乘8的棋盘,现在要将八个皇后放到棋盘上,满足:对于每一个皇后,在自己所在的行、列、两个对角线都没有其他皇后。
在这里插入图片描述
不了解爬山法随机重启爬山法允许侧移的爬山法的话,请看这里。

规定棋盘的同列只能出现一个皇后。每一个棋盘,对应于一个长度为8的序列,每一个数的范围是[1, 8],第k个数字所代表的含义是第k列中皇后所在的行数,如[3,2,5,4,3,2,1,3]代表棋盘上从第一列到第八列,皇后所摆放的行数分别为第3,2,5,4,3,2,1,3行。任意状态(包括初始状态)的所有后继状态为【从当前状态开始,将任意一个皇后移到同列的其他7个格子后的所有状态】。对于任意一个已有八个皇后的棋盘(当然同一列有且仅有一个皇后)的后继状态均有8*7=56个。


2 程序代码

2.1 程序1

程序1:generate_init_seq.py。如果8个皇后在8*8的棋盘上可以随意摆放,当然是不能在同一个格子里放超过一个皇后的情况下,本来所有需要测试是否满足要求的序列共有64*63*…*57=1.78e+14个,这太多了。所以此程序的工作是筛选出那些【每行与每列都只有一个皇后存在】的序列,这样的序列有8*7*6*5*4*3*2=40320个,可以大大缩减后续程序的运行时间,而且这样在后面处理每个序列时只需要考虑两条对角线上和所在的行上有没有其他皇后即可(不用考虑列)。如下:

import json
import timestart = time.time()seq = [[i, j, k, l, m, n, o, p]for i in range(1, 9)for j in range(1, 9)for k in range(1, 9)for l in range(1, 9)for m in range(1, 9)for n in range(1, 9)for o in range(1, 9)for p in range(1, 9)if all([i != j, i != k, i != l, i != m, i != n, i != o, i != p,j != k, j != l, j != m, j != n, j != o, j != p,k != l, k != m, k != n, k != o, k != p,l != m, l != n, l != o, l != p,m != n, m != o, m != p,n != o, n != p,o != p])]  # 筛选出【每行与每列都只有一个皇后】的序列print('有' + str(len(seq)) + '个可能的序列')with open('seq.json', 'w') as file_object:json.dump(seq, file_object)end = time.time()print('Successful!')
print('已将生成的序列存储到文件seq.json中,用时' + str('%.2f' % (end - start)) + 's')

输出如下。注意会生成一个文件seq.json,我上传到了csdn上,你可以看看这里,你也可以运行程序1,就可以在自己电脑上得到一个文件,除了运行时间有区别,其他输出和我这个是一样的:

40320个可能的序列
Successful!
已将生成的序列存储到文件seq.json中,用时17.61s

2.2 程序2

程序2:functions.py。包括两个函数:attacked_queens_pairs, display_board,分别完成【计算序列对应棋盘的互相攻击的皇后对数】和【打印输出序列对应的棋盘】的功能。如下:

import numpy as npdef attacked_queens_pairs(seqs):"""计算序列对应棋盘的【互相攻击的皇后对数n】,0<=n<=28,最优解要满足n=0只需要检查当前棋盘的八个皇后在各自的行和两条对角线上是否有其他皇后,不需判断同列是否有其他皇后"""a = np.array([0] * 81)  # 创建一个有81个0的一维数组a = a.reshape(9, 9)  # 改为9*9二维数组。为方便后面使用,只用后八行和后八列的8*8部分,作为一个空白棋盘n = 0  # 互相攻击的皇后对数初始化为0for i in range(1, 9):a[seqs[i - 1]][i] = 1  # 根据序列,按从第一列到最后一列的顺序,在空白棋盘对应位置放一个皇后,生成当前序列对应的棋盘for i in range(1, 9):for k in list(range(1, i)) + list(range(i + 1, 9)):  # 检查每个皇后各自所在的行上是否有其他皇后if a[seqs[i - 1]][k] == 1:  # 有其他皇后n += 1t1 = t2 = seqs[i - 1]for j in range(i - 1, 0, -1):  # 看左半段的两条对角线if t1 != 1:t1 -= 1if a[t1][j] == 1:n += 1  # 正对角线左半段上还有其他皇后if t2 != 8:t2 += 1if a[t2][j] == 1:n += 1  # 次对角线左半段上还有其他皇后t1 = t2 = seqs[i - 1]for j in range(i + 1, 9):  # 看右半段的两条对角线if t1 != 1:t1 -= 1if a[t1][j] == 1:n += 1  # 正对角线右半段上还有其他皇后if t2 != 8:t2 += 1if a[t2][j] == 1:n += 1  # 次对角线右半段上还有其他皇后return int(n/2)  # 返回n/2,因为A攻击B也意味着B攻击A,因此返回n的一半def display_board(seqs):"""显示序列对应的棋盘"""board = np.array([0] * 81)  # 创建一个有81个0的一维数组board = board.reshape(9, 9)  # 改变为9*9二维数组,为了后面方便使用,只用后八行和后八列的8*8部分,作为一个空白棋盘for i in range(1, 9):board[seqs[i - 1]][i] = 1  # 根据序列,从第一列到最后一列的顺序,在对应位置放一个皇后,生成当前序列对应的棋盘print('对应棋盘如下:')for i in board[1:]:for j in i[1:]:print(j, ' ', end="")  # 有了end="",print就不会换行print()  # 输出完一行后再换行,这里不能是print('\n'),否则会换两行

此程序无任何输出,只是定义了2个函数以供主程序调用。

2.3 程序3

2.3.1 爬山法

程序3:main.py。为主程序,通过调用程序2的两个函数,完成爬山法解决八皇后问题的全过程。如下:

import json
import random
from functions import attacked_queens_pairs, display_boardwith open('seq.json', 'r') as file_object:seqs = json.load(file_object)  # 载入保存好的序列current_seqs = random.choice(seqs) # 随机挑选一个序列print('随机挑选的初始序列为:' + str(current_seqs))
display_board(current_seqs)while True:successors = []  # 当前状态的后继状态集合count = 0 # 计数变量dicts = [] # 由一个个字典组成的列表,每个字典有两项内容:序列及对应棋盘互相攻击皇后对数a = list(range(1,9))for item in current_seqs:for i in a[:item - 1] + a[item:]:seqs_tmp = list(current_seqs)seqs_tmp[count] = isuccessors.append(seqs_tmp) # 生成当前棋盘的后继状态,任意棋盘对应的后继状态都有56种count = count + 1if count == 8:breakfor s in successors:tmp_pair = attacked_queens_pairs(s)dicts.append({'seqs':s, 'attacked_queens_pairs':tmp_pair})nums = []for d in dicts:nums.append(d['attacked_queens_pairs']) # 获取所有后继状态的攻击的皇后对数,共56个值mins = min(nums) #取最小的current_attacked_queens_pairs = attacked_queens_pairs(current_seqs)if mins >= current_attacked_queens_pairs: # 当前棋盘最好answer = current_seqs # 算法最终运算结果为当前棋盘breaktemp = []for d in dicts:if d['attacked_queens_pairs'] == mins:temp.append(d['seqs']) # 存储互相攻击的皇后对数最少的棋盘,因为可能不止一个,因此用列表存储current_seqs = random.choice(temp) # 随机选择一个棋盘作为当前棋盘print('------') # 执行这条语句意味着爬山法结束了
if attacked_queens_pairs(answer) == 0:print('已找到最优解序列:' + str(answer))display_board(answer)
else:print('本次搜索未找到最优解,最好的序列为:' + str(answer))print('攻击的皇后对数为'+ str(attacked_queens_pairs(answer)))display_board(answer)

一种输出如下:

随机挑选的初始序列为:[8, 3, 2, 7, 6, 4, 5, 1]
对应棋盘如下:
0  0  0  0  0  0  0  1  
0  0  1  0  0  0  0  0  
0  1  0  0  0  0  0  0  
0  0  0  0  0  1  0  0  
0  0  0  0  0  0  1  0  
0  0  0  0  1  0  0  0  
0  0  0  1  0  0  0  0  
1  0  0  0  0  0  0  0  
------
已找到最优解序列:[3, 6, 2, 7, 1, 4, 8, 5]
对应棋盘如下:
0  0  0  0  1  0  0  0  
0  0  1  0  0  0  0  0  
1  0  0  0  0  0  0  0  
0  0  0  0  0  1  0  0  
0  0  0  0  0  0  0  1  
0  1  0  0  0  0  0  0  
0  0  0  1  0  0  0  0  
0  0  0  0  0  0  1  0  

另一种输出如下:

随机挑选的初始序列为:[2, 1, 6, 8, 5, 3, 4, 7]
对应棋盘如下:
0  1  0  0  0  0  0  0  
1  0  0  0  0  0  0  0  
0  0  0  0  0  1  0  0  
0  0  0  0  0  0  1  0  
0  0  0  0  1  0  0  0  
0  0  1  0  0  0  0  0  
0  0  0  0  0  0  0  1  
0  0  0  1  0  0  0  0  
------
本次搜索未找到最优解,最好的序列为:[3, 1, 6, 8, 5, 2, 4, 7]
攻击的皇后对数为1
对应棋盘如下:
0  1  0  0  0  0  0  0  
0  0  0  0  0  1  0  0  
1  0  0  0  0  0  0  0  
0  0  0  0  0  0  1  0  
0  0  0  0  1  0  0  0  
0  0  1  0  0  0  0  0  
0  0  0  0  0  0  0  1  
0  0  0  1  0  0  0  0  

上面列出了两种输出,第一种找到了最优解,第二种找到的是局部最优解。

通常爬山法可以以很快的速度找到问题的解,因为一般从较差的状态开始扩展是很容易做到的。但是爬山法经常也会陷入局部最优而难以“自拔”,也就是说在算法执行过程中有可能到达这样一种状态——在这个状态下再也做不到更好的改善了。如在解决八皇后问题中,首先从随机生成的一个上面有八个皇后的棋盘开始,使用最陡峭上升的爬山法(steepest-ascent hill climbing)在86%的情况下会陷入局部最优,且仅能在14%的情况下解决问题。爬山法过程比较快,在解决八皇后问题中,平均下来只需四步便可成功得到解,但是同样地,在可能在第三步就陷入了局部最优。下面改变策略,使用随机重启爬山法改进算法。

2.3.2 随机重启爬山法

随机重启爬山法的思想:如果一开始没有成功,那就再试一次,若还没成功就继续尝试。

程序3:main.py。为主程序。如下:

import json
import random
from functions import attacked_queens_pairs, display_boardwith open('seq.json', 'r') as file_object:seqs = json.load(file_object)  # 载入保存好的序列current_seqs = random.choice(seqs) # 随机挑选一个序列print('随机挑选的初始序列为:' + str(current_seqs))
display_board(current_seqs)while True:successors = []  # 当前状态的后继状态集合count = 0 # 计数变量dicts = [] # 由一个个字典组成的列表,每个字典有两项内容:序列及对应棋盘互相攻击皇后对数a = list(range(1,9))for item in current_seqs:for i in a[:item - 1] + a[item:]:seqs_tmp = list(current_seqs)seqs_tmp[count] = isuccessors.append(seqs_tmp) # 生成当前棋盘的后继状态,任意棋盘对应的后继状态都有56种count = count + 1if count == 8:breakfor s in successors:tmp_pair = attacked_queens_pairs(s)dicts.append({'seqs':s, 'attacked_queens_pairs':tmp_pair})nums = []for d in dicts:nums.append(d['attacked_queens_pairs']) # 获取所有后继状态的攻击的皇后对数,共56个值mins = min(nums) #取最小的current_attacked_queens_pairs = attacked_queens_pairs(current_seqs)if mins < current_attacked_queens_pairs: # 后继状态更好temp = []for d in dicts:if d['attacked_queens_pairs'] == mins:temp.append(d['seqs'])  # 存储互相攻击的皇后对数最少的棋盘,因为可能不止一个,因此用列表存储current_seqs = random.choice(temp)  # 随机选择一个棋盘作为当前棋盘elif current_attacked_queens_pairs != 0: # 当前状态不是最优解current_seqs = random.choice(seqs)  # 从初始序列集随机重新挑选一个序列else:answer = current_seqs # 当前状态为最优解breakprint('------') # 执行这条语句意味着爬山法结束了
print('已找到最优解序列:' + str(answer))
print('互相攻击的皇后对数为' + str(attacked_queens_pairs(answer)))
display_board(answer)

一种输出如下:

随机挑选的初始序列为:[7, 1, 8, 6, 3, 2, 4, 5]
对应棋盘如下:
0  1  0  0  0  0  0  0  
0  0  0  0  0  1  0  0  
0  0  0  0  1  0  0  0  
0  0  0  0  0  0  1  0  
0  0  0  0  0  0  0  1  
0  0  0  1  0  0  0  0  
1  0  0  0  0  0  0  0  
0  0  1  0  0  0  0  0  
------
已找到最优解序列:[6, 3, 7, 2, 8, 5, 1, 4]
互相攻击的皇后对数为0
对应棋盘如下:
0  0  0  0  0  0  1  0  
0  0  0  1  0  0  0  0  
0  1  0  0  0  0  0  0  
0  0  0  0  0  0  0  1  
0  0  0  0  0  1  0  0  
1  0  0  0  0  0  0  0  
0  0  1  0  0  0  0  0  
0  0  0  0  1  0  0  0  

算法从随机产生的初始状态开始,执行一系列的爬山搜索过程,若没找到最优解,就再生成一个初始状态,进行搜索,直到找到目标时算法才停止。随机重启爬山法完备的概率接近于1,即随机重启爬山法大多都可以找到解。

2.3.3 允许皇后侧移的爬山法

程序3:main.py。为主程序,通过调用程序2的两个函数,完成允许皇后侧移的爬山法解决八皇后问题的全过程。如下:

import json
import random
from functions import attacked_queens_pairs, display_boardwith open('seq.json', 'r') as file_object:seqs = json.load(file_object)  # 载入保存好的序列current_seqs = random.choice(seqs) # 随机挑选一个序列print('随机挑选的初始序列为:' + str(current_seqs))
display_board(current_seqs)while True:successors = []  # 当前状态的后继状态集合count = 0 # 计数变量dicts = [] # 由一个个字典组成的列表,每个字典有两项内容:序列及对应棋盘互相攻击皇后对数a = list(range(1,9))for item in current_seqs:for i in a[:item - 1] + a[item:]:seqs_tmp = list(current_seqs)seqs_tmp[count] = isuccessors.append(seqs_tmp) # 生成当前棋盘的后继状态,任意棋盘对应的后继状态都有56种count = count + 1if count == 8:breakfor s in successors:tmp_pair = attacked_queens_pairs(s)dicts.append({'seqs':s, 'attacked_queens_pairs':tmp_pair})nums = []for d in dicts:nums.append(d['attacked_queens_pairs']) # 获取所有后继状态的攻击的皇后对数,共56个值mins = min(nums) #取最小的current_attacked_queens_pairs = attacked_queens_pairs(current_seqs)if mins < current_attacked_queens_pairs: # 后继状态更好temp = []for d in dicts:if d['attacked_queens_pairs'] == mins:temp.append(d['seqs'])  # 存储互相攻击的皇后对数最少的棋盘,因为可能不止一个,因此用列表存储current_seqs = random.choice(temp)  # 随机选择一个棋盘作为当前棋盘elif current_attacked_queens_pairs != 0: # 当前状态不是最优解a = list(range(8))pos1 = random.choice(a)a.remove(pos1)pos2 = random.choice(a)current_seqs[pos1],current_seqs[pos2] = current_seqs[pos2],current_seqs[pos1]else:answer = current_seqs # 当前状态为最优解breakprint('------') # 执行这条语句意味着爬山法结束了
print('已找到最优解序列:' + str(answer))
print('互相攻击的皇后对数为' + str(attacked_queens_pairs(answer)))
display_board(answer)

输出如下:

随机挑选的初始序列为:[2, 7, 6, 8, 4, 5, 3, 1]
对应棋盘如下:
0  0  0  0  0  0  0  1  
1  0  0  0  0  0  0  0  
0  0  0  0  0  0  1  0  
0  0  0  0  1  0  0  0  
0  0  0  0  0  1  0  0  
0  0  1  0  0  0  0  0  
0  1  0  0  0  0  0  0  
0  0  0  1  0  0  0  0  
------
已找到最优解序列:[2, 4, 6, 8, 3, 1, 7, 5]
互相攻击的皇后对数为0
对应棋盘如下:
0  0  0  0  0  1  0  0  
1  0  0  0  0  0  0  0  
0  0  0  0  1  0  0  0  
0  1  0  0  0  0  0  0  
0  0  0  0  0  0  0  1  
0  0  1  0  0  0  0  0  
0  0  0  0  0  0  1  0  
0  0  0  1  0  0  0  0  

在上述爬山法代码中,若到达了局部最优状态时,允许任意一对(并且只允许一对)皇后横向移动,例如将第2列和第7列的皇后移入对方行的位置。这种改进方案可以大大提高爬山法解决八皇后问题的成功概率,上述代码基本上每次运行都可以得到解序列。


3 评价

自己需要补充模拟退火算法的代码


END


http://chatgpt.dhexx.cn/article/UaUlDnCh.shtml

相关文章

爬山法和模拟退火

文章目录 前言一、爬山法1.算法步骤2.算法局限性 二、模拟退火1.算法步骤2.注意点3.例题求费马点保龄球均分数据 总结 前言 爬山法和模拟退火都为随机化算法&#xff0c;考场想不到正解时可用来骗分&#xff0c;通常效果较好。模拟退火是基于爬山法的优化。 一、爬山法 爬山法是…

搜索算法——爬山法

不断更新中...... 一、 爬山算法&#xff1a;爬山算法是一种简单的贪心搜索算法&#xff0c;该算法每次从当前位置的临近空间中选择一个最优解作为当前解&#xff0c;直到达到一个局部最优解。爬山算法可以类比成一个有失忆的人在浓雾中爬山。这里就揭示了爬山算法的两个问题…

搜索 —— 启发式搜索 —— 爬山法

【概述】 爬山法&#xff08;Hill Climbing&#xff0c;HC&#xff09;是一种局部择优的贪心搜索算法&#xff0c;其本质上是梯度下降法。 该算法每次从当前的节点开始&#xff0c;与周围的邻接点进行比较&#xff1a; 若当前节点是最大的&#xff0c;那么返回当前节点&…

Linux:快速查看IP地址及修改IP地址

导读Linux下如何快速查看IP地址及修改IP地址&#xff0c;有一个方法供参考 查ip 方法/步骤1: 打开linux操作系统在进入到界面 方法/步骤2: 在桌面右击打开终端。 方法/步骤3: 终端里输入ifconfig -a命令在回车键 方法/步骤4: 如下图可以看到了ip地址。 修改ip 方法/…

Linux Ubuntu查看IP信息的两种方式Ubuntu中检查你的 IP 地址

论使用什么系统&#xff0c;都有用到ip地址的时候&#xff0c;习惯了windows系统的人很容易就能查找出系统的ip&#xff0c;但是在linux系统如何查看ip呢&#xff1f;作为Linux新手&#xff0c;以Ubuntu的使用经验&#xff0c;我知道Ubuntu查看IP有两种方式。 第一种是在终端中…

Linux查询出口IP

查询的方式是通过Linux的curl访问查询ip的网站进行查询 具体步骤&#xff1a; 1.查询查询ip网站的ip 2.配置Linux的hosts文件 在/etc中的hosts文件增加上面的域名和ip&#xff08;注意&#xff1a;是ifconfig&#xff0c;不是ipconfig&#xff09; 3.在ssh命令下执行 curl ifc…

Linux 查看本地ip

Linux 查看本地ip 终端中输入指令ifconfig -a终端中输入指令hostname -I通过图形界面查看IP地址&#xff08;还未试通&#xff09; 终端中输入指令ifconfig -a 弹出的IP地址有点多 。 终端中输入指令hostname -I 会直接显示本机在局域网内的IP地址&#xff0c;但可能会显示多…

Linux服务器查看Ip地址

在服务器的网络配置中&#xff0c;需要同时配置这两种网络&#xff0c;才能使服务器正常使用。使用内网是为了保证我们的服务器处在一个安全的网络环境中&#xff0c;可以减少外部病毒的影响&#xff0c;而访问外网是为了方便我们配置服务器一些资源&#xff0c;如驱动程序&…

Linux 查看IP

UBuntu 系统下 按CtrlAltT 唤出终端 在终端输入: ifconfig 命令 点击回车 就可以看到自己电脑在局域网的IP地址了 图中第二行 inet 地址&#xff1a;192.168.1.101 就是你的电脑在局域网的IP地址了 如果输入 ifconfig 提示 找不到命令 那就在终端输入&#xff1a;sudo apt-get …

linux查看本机ip地址

linux中哪个命令可以查看自己的IP地址 50 我的主机是通过宽带联网的&#xff0c;主机的IP通过那个本地连接可以看到&#xff0c;但在虚拟机Debian linux5.0终端下输入route -n显示的是destination的IP&#xff0c;怎么查看属于虚拟机linux的IP呢&#xff1f;&#xff08;linux通…

Linux系统下怎么查询自己的ip和port

Linux系统下如何查询自己的ip和port 前言&#xff1a;在Linux系统中&#xff0c;学习网络协议之后&#xff0c;就需要经常查看自己系统的ip和port是否正常开启,那么怎么快速查找它们呢&#xff1f; 我现在就把它们列出来&#xff0c;以解我的心头之恨&#xff01;&#xff01;…

Linux查看IP地址命令

Linux查看公有&#xff08;运营商&#xff09;IP地址&#xff1a;下面两个命令都可以查 curl http://ifconfig.io curl ident.me Linux查看私有IP地址&#xff1a;可以使用以下四个命令中的任一一个 ip addr hostname -I | awk {print $1} ip route get 1.2.3.4 | awk {print…

linux怎么查看ip地址

linux怎么查看IP地址&#xff0c;怎么使用命令来查看IP地址&#xff1f;如下图教您怎么操作。 演示环境&#xff1a;centos7 方法一&#xff1a; 首先打开linux操作系统在进入到界面。 桌面右键打开终端 在终端里输入命令后按下回车键 ifconfig -a我们将看到ens33 位置处的…

linux 查看IP地址

参考资料整理 一.在 linux 下可以通过两个命令来查看本机的 IP 地址&#xff1a; 1.支持包括 Linux 在内的所有 Unix 系统。 # /sbin/ifconfig 2. 对于Linux 而言&#xff0c;也可以使用 ip 命令查看&#xff0c;提示&#xff1a;没有ifconfig命令时可以…

linux查看ip命令

参考文章&#xff1a;https://www.linuxidc.com/Linux/2017-10/147449.htm 摘要&#xff1a; 1、ifconfig 查看ip 2、vi 编辑 /etc/sysconfig/network-scripts 下的配置文件&#xff0c;设置动态分配IP有效 一、查看ip命令&#xff1a;ifconfig &#xff08;ip add 命令也行&…

在 Linux 命令行中查找 IP 地址介绍

几年前&#xff0c;ifconfig 是 Linux 中最受欢迎的查询本机 IP 地址的方法。但是现如今 ifconfig 命令已经被启用了。在某些 Linux 发行版上已经不用了。那么&#xff0c;除此以外还有什么别的方式来查询 IP 地址呢&#xff1f;今天我们就来了解一下这个问题。 在 Linux 命令…

在Linux系统中查找IP地址(六种方式)

在terminal输入命令 hostname -I 或 ifconfig 或 ip addr 或 ip address 或 ip addr show 或 ip address show

Linux下查看IP

输入ip查询命名 ip addr 也可以输入 ifconfig&#xff08;centOs7没有ifconfig命令&#xff09;查看ip&#xff0c;但此命令会出现3个条目&#xff0c;centos的ip地址是ens33条目中的inet值。 发现 ens33 没有 inet 这个属性&#xff0c;那么就没法通过IP地址连接虚拟机。 接着…

Linux 中查找 IP 地址的方法

概要 在 Linux 系统中&#xff0c;经常需要查找 IP 地址以进行网络配置、故障排除或安全管理。无论是查找本地主机的 IP 地址还是查找其他设备的 IP 地址&#xff0c;本文将介绍三种简单的方法&#xff0c;帮助你在 Linux 中轻松找到所需的 IP 地址。 方法一&#xff1a;使用 i…

12.4 高斯模糊

代码来源于 冯乐乐 shader入门精要 using System.Collections; using System.Collections.Generic; using UnityEngine;public class MyGaussianBlur : PostEffectsBase {public Shader gaussianBlurShader;private Material gaussianBlurMat;public Material material{get{gau…