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的批量远程管理和部署工具Fabric用法实例
Jan 23 Python
django 开发忘记密码通过邮箱找回功能示例
Apr 17 Python
pygame游戏之旅 添加游戏介绍
Nov 20 Python
python获取txt文件词向量过程详解
Jul 05 Python
Python字符串大小写转换拼接删除空白
Sep 19 Python
详解python中各种文件打开模式
Jan 19 Python
Python3内置函数chr和ord实现进制转换
Jun 05 Python
Python必须了解的35个关键词
Jul 16 Python
golang/python实现归并排序实例代码
Aug 30 Python
Python3爬虫RedisDump的安装步骤
Feb 20 Python
python tkinter模块的简单使用
Apr 07 Python
深入解析NumPy中的Broadcasting广播机制
May 30 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
松下Panasonic RF-B65电路分析
2021/03/02 无线电
给初学PHP的5个入手程序
2006/11/23 PHP
10个实用的PHP代码片段
2011/09/02 PHP
PHP插入排序实现代码
2013/04/04 PHP
php Calender(日历)代码分享
2014/01/03 PHP
简单谈谈favicon
2015/06/10 PHP
关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
2015/12/21 PHP
ExtJS 学习专题(一) 如何应用ExtJS(附实例)
2010/03/11 Javascript
Jquery ThickBox插件使用心得(不建议使用)
2010/09/08 Javascript
关于Ext中form移除textfield方法:hide(),setVisible(false),remove()
2010/12/02 Javascript
JavaScript对象的property属性详解
2014/04/01 Javascript
Ajax中解析Json的两种方法对比分析
2015/06/25 Javascript
js+CSS实现模拟华丽的select控件下拉菜单效果
2015/09/01 Javascript
使用JavaScript为Kindeditor自定义按钮增加Audio标签
2016/03/18 Javascript
两种简单的跨域方法(jsonp、php)
2017/01/02 Javascript
JQ中$(window).load和$(document).ready区别与执行顺序
2017/03/01 Javascript
jquery实现图片平滑滚动详解
2017/03/22 jQuery
JavaScript实现自动跳转文本功能
2017/05/25 Javascript
jquery实现企业定位式导航效果
2018/01/01 jQuery
vue两个组件间值的传递或修改方式
2018/07/04 Javascript
修改vue+webpack run build的路径方法
2018/09/01 Javascript
vue封装一个简单的div框选时间的组件的方法
2019/01/06 Javascript
vue数据响应式原理知识点总结
2020/02/16 Javascript
Python3.6 Schedule模块定时任务(实例讲解)
2017/11/09 Python
对python3 urllib包与http包的使用详解
2018/05/10 Python
Python中的引用知识点总结
2019/05/20 Python
python3获取url文件大小示例代码
2019/09/18 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
2020/05/03 Python
移动端Html5中百度地图的点击事件
2019/01/31 HTML / CSS
党委班子剖析材料
2014/08/21 职场文书
农民工预备党员思想汇报
2014/09/14 职场文书
就业协议书盖章的注意事项
2014/09/28 职场文书
被委托人身份证明
2015/08/07 职场文书
初二英语教学反思
2016/02/15 职场文书
2016大学生国家助学贷款承诺书
2016/03/25 职场文书
导游词之黄帝陵景区
2019/09/16 职场文书