Python使用遗传算法解决最大流问题


Posted in Python onJanuary 29, 2018

本文为大家分享了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)

Python使用遗传算法解决最大流问题

较大规模的情况

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)

Python使用遗传算法解决最大流问题

In [109]: A = generate_Matrix(100,200)
In [110]: road , M=Max_road(A,0.1,10)
In [111]: draw_road(road,A)

Python使用遗传算法解决最大流问题

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中暂存上传图片的方法
Feb 18 Python
Python中利用函数装饰器实现备忘功能
Mar 30 Python
python处理二进制数据的方法
Jun 03 Python
python3.7.0的安装步骤
Aug 27 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
Jun 27 Python
pybind11和numpy进行交互的方法
Jul 04 Python
Python3enumrate和range对比及示例详解
Jul 13 Python
Flask框架路由和视图用法实例分析
Nov 07 Python
利用keras加载训练好的.H5文件,并实现预测图片
Jan 24 Python
Python多线程thread及模块使用实例
Apr 28 Python
python中rb含义理解
Jun 18 Python
Python paramiko使用方法代码汇总
Nov 20 Python
Python subprocess模块详细解读
Jan 29 #Python
python微信跳一跳游戏辅助代码解析
Jan 29 #Python
Python面向对象之继承代码详解
Jan 29 #Python
Python多线程threading和multiprocessing模块实例解析
Jan 29 #Python
Python编程scoketServer实现多线程同步实例代码
Jan 29 #Python
Python模块搜索路径代码详解
Jan 29 #Python
python机器人行走步数问题的解决
Jan 29 #Python
You might like
简单的用PHP编写的导航条程序
2006/10/09 PHP
php adodb分页实现代码
2009/03/19 PHP
php echo 输出字符串函数详解
2010/05/13 PHP
php正则表达式(regar expression)
2011/09/10 PHP
深入php self与$this的详解
2013/06/08 PHP
Firefox下提示illegal character并出现乱码的原因
2010/03/25 Javascript
初窥JQuery-Jquery简介 入门了解篇
2010/11/25 Javascript
js中 关于undefined和null的区别介绍
2013/04/16 Javascript
JS实现定时页面弹出类似QQ新闻的提示框
2013/11/07 Javascript
JavaScript实现自动对页面上敏感词进行屏蔽的方法
2015/07/27 Javascript
cocos2dx骨骼动画Armature源码剖析(一)
2015/09/08 Javascript
基于jquery实现鼠标左右拖动滑块滑动附源码下载
2015/12/23 Javascript
深入浅析JavaScript函数前面的加号和叹号
2016/07/09 Javascript
基于bootstrap实现广告轮播带图片和文字效果
2016/07/22 Javascript
Bootstrap实现渐变顶部固定自适应导航栏
2020/08/27 Javascript
vue.js中mint-ui框架的使用方法
2017/05/12 Javascript
详解Vue双向数据绑定原理解析
2017/09/11 Javascript
使用form-create动态生成vue自定义组件和嵌套表单组件
2019/01/18 Javascript
js根据需要计算数组中重复出现某个元素的个数
2019/01/18 Javascript
vue接入腾讯防水墙代码
2019/05/07 Javascript
react的hooks的用法详解
2020/10/12 Javascript
[01:33]一分钟玩转DOTA2第三弹:DOTA2&DotA快捷操作大对比
2014/06/04 DOTA
在Python中操作字符串之replace()方法的使用
2015/05/19 Python
python文件与目录操作实例详解
2016/02/22 Python
python 基础教程之Map使用方法
2017/01/17 Python
Python的时间模块datetime详解
2017/04/17 Python
Windows 7下Python Web环境搭建图文教程
2018/03/20 Python
使用python实现快速搭建简易的FTP服务器
2018/09/12 Python
详解CSS 3 中的 calc() 方法
2018/01/12 HTML / CSS
amazeui时间组件的实现示例
2020/08/18 HTML / CSS
美国猫狗药物和用品网站:PetCareRx
2017/01/05 全球购物
美国快时尚彩妆品牌:Winky Lux(透明花瓣润唇膏)
2018/11/06 全球购物
三分钟演讲稿范文
2014/04/24 职场文书
乡文化站暑期培训方案
2014/08/28 职场文书
爱国主义电影观后感
2015/06/18 职场文书
《黑岩★★射手 DAWN FALL》BD发售宣传CM公开
2022/04/04 日漫