Python使用遗传算法解决最大流问题
作者:ZJun310 发布时间:2023-02-19 10:49:57
标签:Python,遗传算法,最大流
本文为大家分享了Python遗传算法解决最大流问题,供大家参考,具体内容如下
Generate_matrix
def Generate_matrix(x,y):
import numpy as np
import random
return np.ceil(np.array([random.random()*10 for i in range(x*y)]).reshape(x,y))
Max_road
def Max_road(A,degree,start):
import random
import numpy as np
import copy
def change(M,number,start): # number 控制变异程度 start 控制变异量
x , y = M.shape
for i in range(start,x):
Line = zip(range(len(M[i])),M[i])
index_0 = [t[0] for t in Line if t[1]==0] # 获取 0 所对应的下标
index_1 = [t[0] for t in Line if t[1]==1] # 获取 1 所对应的下标
M[i][random.sample(index_0,number)[0]]=1 # 随机改变序列中 number 个值 0->1
M[i][random.sample(index_1,number)[0]]=0 # 随机改变序列中 number 个值 1->0
return M
x,y = A.shape
n=x
generation = y
#初始化一个有 n 中情况的解决方案矩阵
init_solve = np.zeros([n,x+y-2])
init=[1]*(x-1)+[0]*(y-1)
for i in range(n) :
random.shuffle(init)
init_solve[i,:] = init # 1 表示向下走 0 表示向右走
solve = copy.copy(init_solve)
for loop in range(generation):
Sum = [A[0,0]]*n # 用于记录每一种方案的总流量
for i in range(n):
j=0;k=0;
for m in solve[i,:]:
if m==1:
k=k+1
else:
j=j+1
Sum[i] = Sum[i] + A[k,j]
Sum_index = zip(range(len(Sum)),Sum)
sort_sum_index = sorted(Sum_index,key = lambda d : d[1] , reverse =True) # 将 方案 按照流量总和排序
Max = sort_sum_index[0][1] # 最大流量
#print Max
solve_index_half = [a[0] for a in sort_sum_index[:n/2]] # 保留排序后方案的一半
solve = np.concatenate([solve[solve_index_half],solve[solve_index_half]]) # 将保留的一半方案 进行复制 ,复制部分用于变异
change(solve,int((x+y-2)*degree)+1 ,start) # 变异
return solve[0] , Max
Draw_road
def Draw_road(road,A):
import pylab as plt
import seaborn
seaborn.set()
x , y =A.shape
# 将下移和右移映射到绘图坐标上
Road = [(1,x)] # 初始坐标
j=1;k=x;
for m in road:
if m==1:
k=k-1
else:
j=j+1
Road.append((j,k))
# print Road
for i in range(len(road)):
plt.plot([Road[i][0],Road[i+1][0]],[Road[i][1],Road[i+1][1]])
实际运行的例子
In [119]: A = Generate_matrix(4,6)
In [120]: A
Out[120]:
array([[ 10., 1., 7., 10., 8., 8.],
[ 4., 8., 8., 4., 8., 2.],
[ 9., 8., 8., 3., 9., 8.],
[ 7., 2., 5., 9., 3., 8.]])
In [121]: road , M=Max_road(A,0.1,2)
In [122]: Draw_road(road,A)
较大规模的情况
In [105]: A = Generate_matrix(40,60)
In [106]: road , M=Max_road(A,0.1,4)
In [107]: road
Out[107]:
array([ 0., 0., 0., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0.,
1., 0., 0., 0., 1., 0., 0., 1., 0., 1., 1., 1., 1.,
1., 0., 0., 0., 0., 0., 1., 0., 0., 1., 0., 0., 0.,
1., 0., 0., 0., 1., 0., 1., 0., 0., 1., 0., 0., 1.,
0., 0., 0., 1., 0., 0., 1., 1., 1., 1., 0., 0., 0.,
0., 0., 0., 1., 0., 1., 1., 1., 1., 0., 1., 0., 1.,
1., 1., 0., 1., 0., 1., 0., 1., 0., 1., 0., 0., 1.,
0., 1., 0., 0., 1., 0., 1.])
In [108]: Draw_road(road,A)
In [109]: A = generate_Matrix(100,200)
In [110]: road , M=Max_road(A,0.1,10)
In [111]: draw_road(road,A)
来源:http://blog.csdn.net/u014135091/article/details/48733295


猜你喜欢
- 本文实例讲述了Python中的装饰器用法。分享给大家供大家参考。具体分析如下:这里还是先由stackoverflow上面的一个问题引起吧,如
- 数据库优化包含以下三部分,数据库自身的优化,数据库表优化,程序操作优化.此文为第三部分 概述:程序访问优化也可以认为是访问SQL语
- 今天一个朋友给个需求: 来来 {'isOK': 1, 'isRunning': None, 'isE
- 实现代码一、#!/usr/bin/pythonx,y=9,9 &nbs
- python之循环遍历关于循环遍历大家都知道,不外乎for和while,今天我在这写点不一样的循环和遍历。在实践中有时会遇到删除列表中的元素
- 1 简介Golang 是一门优秀的语言,特别是在并发编程上,得益于它的协程和 channel 等,非常方便易用。它通过 go module
- 从这次开始,我会由简单到困难(其实也不会困难到哪里去)讲几个例程,每一个例程都是我自己写(或者修改,那样的话我会提供原始出处)的,都具有一定
- 生成方式Python中想要自动生成 model文件可以通过 sqlacodegen这个命令来生成对应的model文件sqlacodegen
- 目录什么是分区表分区表应用场景分区表的限制分区类型分区表的使用1、范围分区2、列表分区(list分区)3、列分区4、hash分区5、秘钥分区
- 前言随着圣诞的到来,大家纷纷@官方微信给自己的头像加上一顶圣诞帽。当然这种事情用很多P图软件都可以做到。但是作为一个学习图像处理的技术人,还
- django1.3新加入了一个静态资源管理的app,django.contrib.staticfiles。在以往的django版本中,静态资
- 视频观看视频函数的参数定义函数时,我们把参数的名字和位置确定下来,函数的接口定义就完成了。参数在函数名后的括号内指定。您可以根据需要添加任意
- 由于在Python2 中的默认编码为ASCII,但是在Python3中的默认编码为UTF-8。问题:所以在使用np.load(det.npy
- json的作用JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式json.dumps(): 对数
- 案例场景 今天在线上发现一个问题,由于监控没有覆盖到,某台机器的磁盘被写满了,导致线上My
- 概念单元测试 UT测试,针对程序来进行正确检测测试工作,一个优秀强壮代码 需要有完美的 UT测试用例go test基本用法go test 测
- 三种方法:①直接使用dict②使用defaultdict③使用Counter ps:`int()`函数默认返回0 ①di
- “/”应用程序中的服务器错误。用户 'jb51net' 登录失败。原因: 该帐户的密码必须更改。说明: 执行当前 Web 请
- python 封装tokenimport datetimeclass MyJwt:def __init__(self): &n
- Python3:字典中的items()函数一、Python2.x中items(): 和之前一样,本渣渣先贴出来python中help的帮助