服务器不同权值的分流算法


/**
** C#实现
** http://www.cnblogs.com/shanyou/archive/2012/11/09/2763272.html
**/


package com;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class LoadBalance {
// / <summary>
// / 锁对象
// / </summary>
private static Object locker = new Object();

// / <summary>
// / 服务器权重列表
// / </summary>
private static List<Integer> weightList = new ArrayList<Integer>();

// / <summary>
// / 当前索引
// / </summary>
private static int currentIndex;

// / <summary>
// / 当前权重
// / </summary>
private static int currentWeight;

private static int maxWeight;

// / <summary>
// / 最大公约数
// / </summary>
private static int gcd;

private LoadBalance() {
currentIndex = -1;
currentWeight = 0;

// 获取服务器权重列表 从配置文件
weightList = GetWeightList();
maxWeight = GetMaxWeight(weightList);
gcd = GetMaxGCD(weightList);
}

private static List<Integer> GetWeightList() {
List<Integer> list = new ArrayList<Integer>();
list.add(3);
list.add(1);
list.add(1);
list.add(4);
list.add(1);
list.add(7);

return list;
}

public static Integer Start() {
synchronized (locker) {
Integer iWeight = RoundRobin();
if (iWeight != null) {
return iWeight;
}
return weightList.get(0);
}
}

// / <summary>
// / 获取最大公约数
// / </summary>
// / <param name="list">要查找的int集合</param>
// / <returns>返回集合中所有数的最大公约数</returns>
private static int GetMaxGCD(List<Integer> list) {
Collections.sort(list, new WeightCompare());

int iMinWeight = weightList.get(0);

int gcd = 1;

for (int i = 1; i < iMinWeight; i++) {
boolean isFound = true;
for (int iWeight : list) {
if (iWeight % i != 0) {
isFound = false;
break;
}
}
if (isFound)
gcd = i;
}
return gcd;
}

// / <summary>
// / 获取服务器权重集合中的最大权重
// / </summary>
// / <param name="list"></param>
// / <returns></returns>
private static int GetMaxWeight(List<Integer> list) {
int iMaxWeight = 0;
for (int i : list) {
if (iMaxWeight < i) {
iMaxWeight = i;
}
}
return iMaxWeight;
}

private static Integer RoundRobin() {
while (true) {
currentIndex = (currentIndex + 1) % weightList.size();
if (0 == currentIndex) {
currentWeight = currentWeight - gcd;
if (0 >= currentWeight) {
currentWeight = maxWeight;
if (currentWeight == 0) {
return null;
}
}
}

if (weightList.get(currentIndex) >= currentWeight) {
return weightList.get(currentIndex);
}
}
}

}

class WeightCompare implements Comparator<Integer> {

@Override
public int compare(Integer x, Integer y) {
return x - y;
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 神经网络权值优化算法是指通过调整神经网络中的权值,使得网络的输出误差尽可能小。其中一种常用的算法是反向传播算法(Backpropagation,BP算法)。BP算法是一个迭代过程,每一轮将各权值调整一遍,直到输出误差小于某一允许值为止。它使用了梯度下降算法,通过迭代运算求解权值,相当于学习记忆问题。\[1\]神经网络具有处理数值数据的计算能力,同时也具有处理知识的思维、学习、记忆能力。它通过学习和记忆,找出输入和输出变量之间的非线性关系,然后在执行问题和求解时,根据已经训练好的网络进行推理,得出合理的答案和结果。\[2\]在神经网络的训练过程中,可能会出现权值调节过大导致网络麻痹的现象。当权值调得过大时,神经元的加权总和可能会偏大,使得激活函数的输入工作在饱和区,导致激活函数的导数非常小,从而使得对网络权值的调节几乎停顿下来。\[3\] #### 引用[.reference_title] - *1* *2* *3* [bp神经网络权值调整公式,bp神经网络算法推导](https://blog.csdn.net/aifamao2/article/details/126505356)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值