BP神经网络python简单实现

BP神经网络的原理在网上有很详细的说明,这里就不打算细说,这篇文章主要简单的方式设计及实现BP神经网络,并简单测试下在恒等计算(编码)作测试。 

BP神经网络模型图如下



BP神经网络基本思想

BP神经网络学习过程由信息的下向传递和误差的反向传播两个过程组成

正向传递:由模型图中的数据x从输入层到最后输出层z的过程。

反向传播:在训练阶段,如果正向传递过程中发现输出的值与期望的传有误差,由将误差从输出层返传回输入层的过程。返回的过程主要是修改每一层每个连接的权值w,达到减少误的过程。


BP神经网络设计

设计思路是将神经网络分为神经元、网络层及整个网络三个层次。

首先是定义使用sigmoid函数作为激活函数

[python] view plaincopy
在CODE上查看代码片派生到我的代码片
  1. def logistic(x):  
  2.     return 1 / (1 + np.exp(-x))  
  3.   
  4. def logistic_derivative(x):  
  5.     return logistic(x) * (1 - logistic(x))  

神经元的设计


由神经元的设计图可知,BP神经网络可拆解成是神经元的集合。

神经元主要功能:

  1. 计算数据,输出结果。
  2. 更新各连接权值。
  3. 向上一层反馈权值更新值,实现反馈功能。

注意到:

[python] view plaincopy
在CODE上查看代码片派生到我的代码片
  1. weight_add = self.input * self.deltas_item * learning_rate + 0.9 * self.last_weight_add#添加冲量  
代码是添加冲量功能(+ 0.9 * self.last_weight_add ), 这可以加速收敛,如果有兴趣可把它去掉看看训练结果。 

神经元设计代码如下:

[python] view plaincopy
在CODE上查看代码片派生到我的代码片
  1. class Neuron:  
  2.     def __init__(self, len_input):  
  3.         # 输入的初始参数, 随机取很小的值(<0.1)  
  4.         self.weights = np.random.random(len_input) * 0.1  
  5.         # 当前实例的输入  
  6.         self.input = np.ones(len_input)  
  7.         # 对下一层的输出值  
  8.         self.output = 1  
  9.         # 误差项  
  10.         self.deltas_item = 0  
  11.         # 上一次权重增加的量,记录起来方便后面扩展时可考虑增加冲量  
  12.         self.last_weight_add = 0  
  13.   
  14.     def calc_output(self, x):  
  15.         # 计算输出值  
  16.         self.input = x  
  17.         self.output = logistic(np.dot(self.weights.T, self.input))  
  18.         return self.output  
  19.   
  20.     def get_back_weight(self):  
  21.         # 获取反馈差值  
  22.         return self.weights * self.deltas_item  
  23.   
  24.     def update_weight(self, target=0, back_weight=0, learning_rate=0.1, layer="OUTPUT"):  
  25.         # 更新权传  
  26.         if layer == "OUTPUT":  
  27.             self.deltas_item = (target - self.output) * logistic_derivative(self.output)  
  28.         elif layer == "HIDDEN":  
  29.             self.deltas_item = back_weight * logistic_derivative(self.output)  
  30.           
  31.         weight_add = self.input * self.deltas_item * learning_rate + 0.9 * self.last_weight_add#添加冲量  
  32.         self.weights += weight_add  
  33.         self.last_weight_add = weight_add  

网络层设计

管理一个网络层的代码,分为隐藏层和输出层。 (输入层可直接用输入数据,不简单实现。)

网络层主要管理自己层的神经元,所以封装的结果与神经元的接口一样。对向实现自己的功能。

同时为了方便处理,添加了他下一层的引用。

[python] view plaincopy
在CODE上查看代码片派生到我的代码片
  1. class NetLayer:  
  2.     ''''' 
  3.     网络层封装 
  4.     管理当前网络层的神经元列表 
  5.     '''  
  6.     def __init__(self, len_node, in_count):  
  7.         ''''' 
  8.         :param len_node: 当前层的神经元数 
  9.         :param in_count: 当前层的输入数 
  10.         '''  
  11.         # 当前层的神经元列表  
  12.         self.neurons = [Neuron(in_count) for _ in range(len_node)]  
  13.         # 记录下一层的引用,方便递归操作  
  14.         self.next_layer = None  
  15.   
  16.     def calc_output(self, x):  
  17.         output = np.array([node.calc_output(x) for node in self.neurons])  
  18.         if self.next_layer is not None:  
  19.             return self.next_layer.calc_output(output)  
  20.         return output  
  21.   
  22.     def get_back_weight(self):  
  23.         return sum([node.get_back_weight() for node in self.neurons])  
  24.   
  25.     def update_weight(self, learning_rate, target):  
  26.         ''''' 
  27.         更新当前网络层及之后层次的权重 
  28.         使用了递归来操作,所以要求外面调用时必须从网络层的第一层(输入层的下一层)来调用 
  29.         :param learning_rate: 学习率 
  30.         :param target: 输出值 
  31.         '''  
  32.         layer = "OUTPUT"  
  33.         back_weight = np.zeros(len(self.neurons))  
  34.         if self.next_layer is not None:  
  35.             back_weight = self.next_layer.update_weight(learning_rate, target)  
  36.             layer = "HIDDEN"  
  37.         for i, node in enumerate(self.neurons):  
[python] view plaincopy
在CODE上查看代码片派生到我的代码片
  1. <span style="white-space:pre">        </span>target_item = 0 if len(target) <= i else target[i]  
  2.                 node.update_weight(target=<span style="font-family: Arial, Helvetica, sans-serif;">target_item</span><span style="font-family: Arial, Helvetica, sans-serif;">, back_weight=back_weight[i], learning_rate=learning_rate, layer=layer)</span>  
  3.         return self.get_back_weight()  

BP神经网络实现

管理整个网络,对外提供训练接口及预测接口。

构建网络参数为一列表, 第一个元素代码输入参数个数, 最后一个代码输出神经元个数,中间的为各个隐藏层中的神经元的个数。

由于各层间代码链式存储, 所以layers[0]操作就代码了整个网络。

[python] view plaincopy
在CODE上查看代码片派生到我的代码片
  1. class NeuralNetWork:  
  2.   
  3.     def __init__(self, layers):  
  4.         self.layers = []  
  5.         self.construct_network(layers)  
  6.         pass  
  7.   
  8.     def construct_network(self, layers):  
  9.         last_layer = None  
  10.         for i, layer in enumerate(layers):  
  11.             if i == 0:  
  12.                 continue  
  13.             cur_layer = NetLayer(layer, layers[i-1])  
  14.             self.layers.append(cur_layer)  
  15.             if last_layer is not None:  
  16.                 last_layer.next_layer = cur_layer  
  17.             last_layer = cur_layer  
  18.   
  19.     def fit(self, x_train, y_train, learning_rate=0.1, epochs=100000, shuffle=False):  
  20.         ''''' 
  21.         训练网络, 默认按顺序来训练 
  22.         方法 1:按训练数据顺序来训练 
  23.         方法 2: 随机选择测试 
  24.         :param x_train: 输入数据 
  25.         :param y_train: 输出数据 
  26.         :param learning_rate: 学习率 
  27.         :param epochs:权重更新次数 
  28.         :param shuffle:随机取数据训练  
  29.         '''  
  30.         indices = np.arange(len(x_train))  
  31.         for _ in range(epochs):  
  32.             if shuffle:  
  33.                 np.random.shuffle(indices)  
  34.             for i in indices:  
  35.                 self.layers[0].calc_output(x_train[i])  
  36.                 self.layers[0].update_weight(learning_rate, y_train[i])  
  37.         pass  
  38.   
  39.     def predict(self, x):  
  40.         return self.layers[0].calc_output(x)  

测试代码

测试数据中输出数据和输出数据一样。测试AutoEncoder自动编码器。(AutoEncoder不了解的可网上找一下。)

[python] view plaincopy
在CODE上查看代码片派生到我的代码片
  1. if __name__ == '__main__':  
  2.     print("test neural network")  
  3.   
  4.     data = np.array([[10000000],  
  5.                      [01000000],  
  6.                      [00100000],  
  7.                      [00010000],  
  8.                      [00001000],  
  9.                      [00000100],  
  10.                      [00000010],  
  11.                      [00000001]])  
  12.   
  13.     np.set_printoptions(precision=3, suppress=True)  
  14.   
  15.     for item in range(10):  
  16.         network = NeuralNetWork([838])  
  17.         # 让输入数据与输出数据相等  
  18.         network.fit(data, data, learning_rate=0.1, epochs=10000)  
  19.   
  20.         print("\n\n", item,  "result")  
  21.         for item in data:  
  22.             print(item, network.predict(item))  

结果输出

效果还不错,达到了预想的结果。 

问题:可测试结果中有 0.317(已经标红), 是由于把8个数据编码成3个数据有点勉强。 如果网络改成[8,4,8]就能够不出现这样的结果。 大家可以试一下。

[html] view plaincopy
在CODE上查看代码片派生到我的代码片
  1. /Library/Frameworks/Python.framework/Versions/3.4/bin/python3.4 /XXXX/机器学习/number/NeuralNetwork.py  
  2. test neural network  
  3.   
  4.   
  5.  0 result  
  6. [1 0 0 0 0 0 0 0] [ 0.987  0.     0.005  0.     0.     0.01   0.004  0.   ]  
  7. [0 1 0 0 0 0 0 0] [ 0.     0.985  0.     0.006  0.     0.025  0.     0.008]  
  8. [0 0 1 0 0 0 0 0] [ 0.007  0.     0.983  0.     0.007  0.027  0.     0.   ]  
  9. [0 0 0 1 0 0 0 0] [ 0.     0.005  0.     0.985  0.007  0.02   0.     0.   ]  
  10. [0 0 0 0 1 0 0 0] [ 0.     0.     0.005  0.005  0.983  0.013  0.     0.   ]  
  11. [0 0 0 0 0 1 0 0] [ 0.016  0.017  0.02   0.018  0.018  <span style="color:#ff0000;">0.317</span>  0.023  0.017]  
  12. [0 0 0 0 0 0 1 0] [ 0.006  0.     0.     0.     0.     0.026  0.984  0.006]  
  13. [0 0 0 0 0 0 0 1] [ 0.     0.005  0.     0.     0.     0.01   0.004  0.985]  
  14.   
  15.   
  16.  1 result  
  17. [1 0 0 0 0 0 0 0] [ 0.983  0.     0.     0.007  0.007  0.     0.     0.027]  
  18. [0 1 0 0 0 0 0 0] [ 0.     0.986  0.004  0.     0.     0.     0.005  0.01 ]  
  19. [0 0 1 0 0 0 0 0] [ 0.     0.005  0.985  0.     0.005  0.     0.     0.026]  
  20. [0 0 0 1 0 0 0 0] [ 0.005  0.     0.     0.983  0.     0.006  0.     0.015]  
  21. [0 0 0 0 1 0 0 0] [ 0.005  0.     0.004  0.     0.987  0.     0.     0.01 ]  
  22. [0 0 0 0 0 1 0 0] [ 0.     0.     0.     0.006  0.     0.984  0.005  0.018]  
  23. [0 0 0 0 0 0 1 0] [ 0.     0.008  0.     0.     0.     0.006  0.984  0.027]  
  24. [0 0 0 0 0 0 0 1] [ 0.018  0.017  0.025  0.018  0.016  0.018  0.017  <span style="color:#ff0000;">0.317]</span>  
  25.   
  26.   
  27.  2 result  
  28. [1 0 0 0 0 0 0 0] [ 0.966  0.     0.016  0.014  0.     0.     0.     0.   ]  
  29. [0 1 0 0 0 0 0 0] [ 0.     0.969  0.     0.016  0.     0.     0.     0.014]  
  30. [0 0 1 0 0 0 0 0] [ 0.012  0.     0.969  0.     0.     0.013  0.     0.   ]  
  31. [0 0 0 1 0 0 0 0] [ 0.014  0.014  0.     0.969  0.     0.     0.     0.   ]  
  32. [0 0 0 0 1 0 0 0] [ 0.     0.     0.     0.     0.962  0.016  0.02   0.   ]  
  33. [0 0 0 0 0 1 0 0] [ 0.     0.     0.02   0.     0.016  0.963  0.     0.   ]  
  34. [0 0 0 0 0 0 1 0] [ 0.     0.     0.     0.     0.012  0.     0.969  0.011]  
  35. [0 0 0 0 0 0 0 1] [ 0.     0.014  0.     0.     0.     0.     0.016  0.966]  
  36.   
  37.   
  38.  3 result  
  39. [1 0 0 0 0 0 0 0] [ 0.983  0.     0.     0.007  0.027  0.     0.     0.007]  
  40. [0 1 0 0 0 0 0 0] [ 0.     0.986  0.004  0.     0.01   0.005  0.     0.   ]  
  41. [0 0 1 0 0 0 0 0] [ 0.     0.006  0.984  0.006  0.026  0.     0.     0.   ]  
  42. [0 0 0 1 0 0 0 0] [ 0.005  0.     0.004  0.987  0.01   0.     0.     0.   ]  
  43. [0 0 0 0 1 0 0 0] [ 0.019  0.017  0.024  0.016  <span style="color:#ff0000;">0.317</span>  0.017  0.018  0.018]  
  44. [0 0 0 0 0 1 0 0] [ 0.     0.008  0.     0.     0.026  0.984  0.006  0.   ]  
  45. [0 0 0 0 0 0 1 0] [ 0.     0.     0.     0.     0.019  0.005  0.984  0.007]  
  46. [0 0 0 0 0 0 0 1] [ 0.005  0.     0.     0.     0.014  0.     0.005  0.983]  
  47.   
  48.   
  49.  4 result  
  50. [1 0 0 0 0 0 0 0] [ 0.969  0.014  0.     0.     0.     0.     0.014  0.   ]  
  51. [0 1 0 0 0 0 0 0] [ 0.014  0.966  0.016  0.     0.     0.     0.     0.   ]  
  52. [0 0 1 0 0 0 0 0] [ 0.     0.011  0.969  0.     0.     0.012  0.     0.   ]  
  53. [0 0 0 1 0 0 0 0] [ 0.     0.     0.     0.966  0.     0.     0.013  0.016]  
  54. [0 0 0 0 1 0 0 0] [ 0.     0.     0.     0.     0.963  0.016  0.     0.02 ]  
  55. [0 0 0 0 0 1 0 0] [ 0.     0.     0.02   0.     0.016  0.963  0.     0.   ]  
  56. [0 0 0 0 0 0 1 0] [ 0.016  0.     0.     0.014  0.     0.     0.969  0.   ]  
  57. [0 0 0 0 0 0 0 1] [ 0.     0.     0.     0.011  0.012  0.     0.     0.969]  
  58.   
  59.   
  60.  5 result  
  61. [1 0 0 0 0 0 0 0] [ 0.966  0.     0.016  0.     0.     0.018  0.     0.   ]  
  62. [0 1 0 0 0 0 0 0] [ 0.     0.969  0.012  0.     0.     0.     0.011  0.   ]  
  63. [0 0 1 0 0 0 0 0] [ 0.015  0.018  0.964  0.     0.     0.     0.     0.   ]  
  64. [0 0 0 1 0 0 0 0] [ 0.     0.     0.     0.968  0.013  0.     0.     0.013]  
  65. [0 0 0 0 1 0 0 0] [ 0.     0.     0.     0.015  0.965  0.015  0.     0.   ]  
  66. [0 0 0 0 0 1 0 0] [ 0.013  0.     0.     0.     0.013  0.968  0.     0.   ]  
  67. [0 0 0 0 0 0 1 0] [ 0.     0.018  0.     0.     0.     0.     0.965  0.014]  
  68. [0 0 0 0 0 0 0 1] [ 0.     0.     0.     0.018  0.     0.     0.015  0.967]  
  69.   
  70.   
  71.  6 result  
  72. [1 0 0 0 0 0 0 0] [ 0.983  0.006  0.     0.005  0.     0.     0.     0.016]  
  73. [0 1 0 0 0 0 0 0] [ 0.006  0.983  0.     0.     0.     0.005  0.     0.017]  
  74. [0 0 1 0 0 0 0 0] [ 0.     0.     0.987  0.005  0.     0.     0.004  0.01 ]  
  75. [0 0 0 1 0 0 0 0] [ 0.007  0.     0.007  0.983  0.     0.     0.     0.027]  
  76. [0 0 0 0 1 0 0 0] [ 0.     0.     0.     0.     0.987  0.005  0.004  0.01 ]  
  77. [0 0 0 0 0 1 0 0] [ 0.     0.007  0.     0.     0.008  0.983  0.     0.027]  
  78. [0 0 0 0 0 0 1 0] [ 0.     0.     0.005  0.     0.005  0.     0.985  0.026]  
  79. [0 0 0 0 0 0 0 1] [ 0.018  0.018  0.017  0.017  0.017  0.017  0.025  <span style="color:#ff0000;">0.317</span>]  
  80.   
  81.   
  82.  7 result  
  83. [1 0 0 0 0 0 0 0] [ 0.969  0.     0.     0.     0.014  0.     0.     0.015]  
  84. [0 1 0 0 0 0 0 0] [ 0.     0.963  0.02   0.     0.     0.017  0.     0.   ]  
  85. [0 0 1 0 0 0 0 0] [ 0.     0.012  0.969  0.     0.     0.     0.011  0.   ]  
  86. [0 0 0 1 0 0 0 0] [ 0.     0.     0.     0.969  0.011  0.013  0.     0.   ]  
  87. [0 0 0 0 1 0 0 0] [ 0.014  0.     0.     0.016  0.966  0.     0.     0.   ]  
  88. [0 0 0 0 0 1 0 0] [ 0.     0.016  0.     0.02   0.     0.962  0.     0.   ]  
  89. [0 0 0 0 0 0 1 0] [ 0.     0.     0.016  0.     0.     0.     0.966  0.014]  
  90. [0 0 0 0 0 0 0 1] [ 0.015  0.     0.     0.     0.     0.     0.014  0.969]  
  91.   
  92.   
  93.  8 result  
  94. [1 0 0 0 0 0 0 0] [ 0.966  0.016  0.013  0.     0.     0.     0.     0.   ]  
  95. [0 1 0 0 0 0 0 0] [ 0.011  0.969  0.     0.     0.     0.     0.012  0.   ]  
  96. [0 0 1 0 0 0 0 0] [ 0.014  0.     0.969  0.015  0.     0.     0.     0.   ]  
  97. [0 0 0 1 0 0 0 0] [ 0.     0.     0.015  0.969  0.     0.014  0.     0.   ]  
  98. [0 0 0 0 1 0 0 0] [ 0.     0.     0.     0.     0.963  0.     0.016  0.02 ]  
  99. [0 0 0 0 0 1 0 0] [ 0.     0.     0.     0.013  0.     0.966  0.     0.016]  
  100. [0 0 0 0 0 0 1 0] [ 0.     0.02   0.     0.     0.016  0.     0.963  0.   ]  
  101. [0 0 0 0 0 0 0 1] [ 0.     0.     0.     0.     0.012  0.011  0.     0.969]  
  102.   
  103.   
  104.  9 result  
  105. [1 0 0 0 0 0 0 0] [ 0.969  0.     0.     0.     0.     0.011  0.     0.011]  
  106. [0 1 0 0 0 0 0 0] [ 0.     0.968  0.     0.     0.     0.     0.018  0.015]  
  107. [0 0 1 0 0 0 0 0] [ 0.     0.     0.965  0.     0.015  0.     0.015  0.   ]  
  108. [0 0 0 1 0 0 0 0] [ 0.     0.     0.     0.966  0.018  0.016  0.     0.   ]  
  109. [0 0 0 0 1 0 0 0] [ 0.     0.     0.013  0.013  0.968  0.     0.     0.   ]  
  110. [0 0 0 0 0 1 0 0] [ 0.018  0.     0.     0.014  0.     0.964  0.     0.   ]  
  111. [0 0 0 0 0 0 1 0] [ 0.     0.013  0.013  0.     0.     0.     0.968  0.   ]  
  112. [0 0 0 0 0 0 0 1] [ 0.018  0.014  0.     0.     0.     0.     0.     0.965]  
  113.   
  114. Process finished with exit code 0  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/387818.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

golang的reflection(转)(一)

2019独角兽企业重金招聘Python工程师标准>>> 反射reflection 可以大大提高程序的灵活性&#xff0c;使得interface{}有更大的发挥余地反射可以使用TypeOf和ValueOf函数从接口中获取目标对象信息反射会将匿名字段作为独立字段&#xff08;匿名字段的本质&#xff09;…

datatables.js 简单使用--多选框和服务器端分页

说明&#xff1a;datatables是一款jQuery表格插件。感觉EasyUI的datagrid更易用 内容&#xff1a;多选框和服务器端分页 缘由&#xff1a;写这篇博客的原因是datatables的文档写的不怎么样&#xff0c;找东西很麻烦 环境&#xff1a;asp.net mvc , vs2015sqlserver2012 显示效…

python异常(高级) Exception

异常(高级) Exception 异常回顾:     try-except 语句 捕获(接收)异常通知,把异常流程变为正常流程     try-finally 语句 执行必须要执行的语句.     raise 语句 发送异常通知,同时进入异常流程     assert 语句 发送AssertionError异常     with 语句 wi…

从BMW Vision iNEXT 看宝马如何进军自动驾驶

安全很重要&#xff0c;空间也要很大&#xff0c;砍掉大量物理按键&#xff0c;内饰材料要环保&#xff0c;还要提供自动和主动两套驾驶方案。这些描述仅是BMW Vision iNEXT&#xff08;下称Vision iNEXT&#xff09;概念车的设计之冰山一角。 一款概念车当然无法完全代表未来…

CSS浮动(二)---Float

重新认识float 2.1. 误解和“误用” 既然提到“误用”&#xff0c;各位看官就此想想&#xff0c;自己平日是怎么使用float的&#xff1f;另外&#xff0c;既然“误用”加了引号&#xff0c;就说明这样的使用并不是真正的误用&#xff0c;而是误打误撞使用之后&#xff0c;带…

云原生生态周报 Vol. 2

业界要闻 Kubernetes External Secrets 近日&#xff0c;世界上最大的域名托管公司 Godaddy公司&#xff0c;正式宣布并详细解读了其开源的K8s外部 Secrets 管理项目&#xff1a; Kubernetes External Secrets&#xff0c;简称KES。这个项目定义了ExternalSecrets API&#xff…

centos 7新机使用前操作

关闭防火墙 systemctl stop firewalld&#xff08;停服务&#xff09; systemctl status firewalld&#xff08;看状态&#xff09; systemctl disable firewalld.service &#xff08;永久关闭&#xff09; selinux getenforce&#xff08;查状态&#xff09; vi /etc/selinux…

软件架构演进

传统架构到分布式架构详解 软件架构演进软件架构的发展经历了从单体架构、垂直架构、SOA架构到微服务架构的过程&#xff0c;博客里写到了这四种架构的特点以及优缺点分析&#xff0c;个人学习之用&#xff0c;仅供参考&#xff01; 1.1.1 单体架构 特点&#xff1a;1、所有的…

hadoop0.20.0第一个例子

这是Hadoop学习全程记录第2篇&#xff0c;在这篇里我将介绍一下如何在Eclipse下写第一个MapReduce程序。 新说明一下我的开发环境&#xff1a; 操作系统&#xff1a;在windows下使用wubi安装了ubuntu 10.10 hadoop版本&#xff1a;hadoop-0.20.2.tar.gz Eclipse版本&…

IDEA 修改JavaWeb的访问路径

问题描述 对于我这个刚刚使用IDEA不久的新手来说&#xff0c;能够正常运行就不错了,不过到了后面&#xff0c;可能会觉得IDEA给你分配的默认访问路径很不顺手&#xff0c;比如访问的时候需要通过: http://localhost:8080/web_war_exploded/ 来访问&#xff0c;对于web_w…

做一个vue的todolist列表

<template><div id"app"><input type"text" v-model"todo" ref"ip"/><button click"add()">新增</button><br/><br/><hr/><ul><li v-for"(item,key) in li…

一种解决 MacBook 里的 App Store 无法登录的问题

刚刚买回来的 2018 款带有 touchbar 的 MacBook Pro 15 inc 在用 App Store 安装 app 时一直无法登录成功&#xff08;网络链接都是好的&#xff09;&#xff0c;导致软件都无法更新&#xff0c;折腾了挺一会的。 后来发现是要退出设置里的 iCloud 登录&#xff0c;然后重新登录…

第二次冲刺

1、今日各个成员的问题 组员问题张晋誌对mui的API看得不是很懂&#xff0c;无法顺利的使用袁庆杰基础不牢,编写困难周建峰eclipse没法创建web项目&#xff0c;按照网上的方法&#xff0c;check for updates 和 install new software 之后也没用许家烨给单一功能知道如何实现但项…

单纯形法

单纯形法 如果目标函数中所有系数都非正&#xff0c;那么显然这些变量直接取0是最优的&#xff0c;所以此时答案为即为常数项。 我们要做的就是通过转化把目标函数的系数全部搞成非负。 思路就是用非基变量替换基变量。 先找到一个目标函数中系数为正的变量&#xff0c;在所有限…

分布式数据库数据一致性的原理、与技术实现方案

http://youzhixueyuan.com/the-principle-and-technology-realization-of-distributed-data-consistency.html 背景 可用性&#xff08;Availability&#xff09;和一致性&#xff08;Consistency&#xff09;是分布式系统的基本问题&#xff0c;先有著名的CAP理论定义过分布式…

模块之re模块 —— 正则

#‘match’只匹配从左向右第一个值是否在中括号的范围内&#xff0c;如果没有就返回None 如果有就直接打印一个对象&#xff0c;加上.group()就可以返回你要找的区间里面的值&#xff0c;如果没有找到对应的值&#xff0c;加上‘.group()’会报错 #‘search’ 默认是从整个st…

centos7 docker

Docker 是一个开源工具&#xff0c;它可以让创建和管理 Linux 容器变得简单。容器就像是轻量级的虚拟机&#xff0c;并且可以以毫秒级的速度来启动或停止。Docker 帮助系统管理员和程序员在容器中开发应用程序&#xff0c;并且可以扩展到成千上万的节点。 容器和 VM&#xff08…

Intellij Idea 2017创建web项目及tomcat部署实战

相关软件&#xff1a;Intellij Idea2017、jdk16、tomcat7 Intellij Idea直接安装&#xff08;可根据需要选择自己设置的安装目录&#xff09;&#xff0c;jdk使用1.6/1.7/1.8都可以&#xff0c;主要是配置好系统环境变量&#xff0c;tomcat7上tomcat的官网下载压缩包解压即可。…

docker ssh

1&#xff0c;首先&#xff0c;需要从Docker官网获得centos或Ubuntu镜像 2&#xff0c;当本地已有Ubuntu镜像后&#xff08;大概200M左右大小&#xff09;&#xff0c;使用如下命令 [cpp]view plaincopy docker run -t -i ubuntu /bin/bash 即可启动一个容器&#xff0c;并放…

[BFS]JZOJ 4672 Graph Coloring

Description 现在你有一张无向图包含n个节点m条边。最初&#xff0c;每一条边都是蓝色或者红色。每一次你可以将一个节点连接的所有边变色&#xff08;从红变蓝&#xff0c;蓝变红&#xff09;。找到一种步数最小的方案&#xff0c;使得所有边的颜色相同。Input 第一行包含两个…