关于利用PSO求解MTSP问题

为什么我的最优的路径会特别小,但是画出来的图又不对劲
close all;
clear all;
popSize=60;%种群的数量
n=25;%城市的数量
nSalemen=5;%旅行商的数量
minTour=3;%最少的访问的城市
numIter=1;%当前的迭代次数
maxIter=2000;%最大的迭代次数
c1=0.5;%认知系数
c2=0.7;%社会学习系数
w=0.96-numIter/maxIter;%惯性权重
city=[ 3.3184 3.8936;
1.6306 2.7365;
7.1099 7.0426;
6.2423 7.9933;
1.5685 9.4000;
7.3024 4.4529;
9.5264 6.9582;
5.4706 3.0430;
2.9782 5.4072;
8.1919 8.1967;
0.9126 0.4486;
6.2795 2.6432;
7.7616 5.1561;
5.9302 8.4823;
6.1111 2.9600;
7.9966 5.1457;
0.5838 7.4490;
3.5309 7.2559;
9.8486 7.5080;
4.6626 8.8609;
4.9832 0.1022;
7.4159 9.0157;
1.2219 2.9728;
5.8982 4.3984;
4.8106 2.7477];%随机生成的城市的坐标
for i=1:n
for j=1:n
cityDist(i,j)=sqrt((city(i,1)-city(j,1)).^2+(city(i,2)-city(i,2)).^2);
end
end%计算城市之间的距离
%初始化路径和断点
popRoute(1,:)=(1:n);
popBreak(1,:)=rand_breaks(nSalemen,minTour,n);
for i=2:popSize
popRoute(i,:)=randperm(n);
popBreak(i,:)=rand_breaks(nSalemen,minTour,n);
end
%初始化速度
for i=1:popSize
velocity(i,:)=round(rand(1,n)*n);
end

figure('Name','MTSP_PSO | 过程','Numbertitle','off');
subplot(2,2,1);
pclr=~get(0,'DefaultAxesColor');
for i=1:n
x(1,i)=city(i,1);
y(1,i)=city(i,2);
end
plot(x,y,'.','Color',pclr);
xlabel('m');
ylabel('m');
title('城市坐标');
for j=1:popSize
pRoute=popRoute(j,:);
pBreak=popBreak(j,:);
d=0;
rngs=[[1 pBreak+1];[pBreak n]]';
for k=1:nSalemen
for p=rngs(k,1):rngs(k,2)-1
d=d+cityDist(pRoute(p),pRoute(p+1));
end
d=d+cityDist(pRoute(rngs(k,1)),pRoute(rngs(k,2)));
end
eachPathDis(j)=d;
end
indivdualBestFitness=eachPathDis;
[minDist,index]=min(eachPathDis);
globalBestFitness=minDist;
for i=1:popSize
globalBestRoute(i,:)=popRoute(index,:);
globalBestBreak(i,:)=popBreak(index,:);
end
indivdualBestRoute=popRoute;
indivdualBestBreak=popBreak;
%迭代开始
for i=1:maxIter
globalBest(numIter)=globalBestFitness;
numIter=numIter+1;

%开始PSO的过程
pij_xij=GenerateChangeNums(popRoute,indivdualBestRoute);
pij_xij=HoldByOdds(pij_xij,c1);
pgj_xij=GenerateChangeNums(popRoute,globalBestRoute);
pgj_xij=HoldByOdds(pgj_xij,c2);

velocity=HoldByOdds(velocity,w);

popRoute=PathExchange(popRoute,velocity);
popRoute=PathExchange(popRoute,pij_xij);
popRoute=PathExchange(popRoute,pgj_xij);
%计算粒子群优化后各路径的距离
for j=1:popSize
    pRoute=popRoute(j,:);
    pBreak=popBreak(j,:);
    d=0;
    rngs=[[1 pBreak+1];[pBreak n]]';
    for k=1:nSalemen
        for p=rngs(k,1):rngs(k,2)-1
            d=d+cityDist(pRoute(p),pRoute(p+1));
        end
        d=d+cityDist(pRoute(rngs(k,1)),pRoute(rngs(k,2)));
    end
    eachPathDis(j)=d;
end

%加入flip和swap过程,此时要更新断点
newPopRoute=zeros(popSize,n);
newPopBreak=zeros(popSize,nSalemen-1);
randomOrder=randperm(popSize);
for j=4:4:popSize
    %chooseIdx=randperm(popSize);
    rts=popRoute(randomOrder(j-3:j),:);

    brs=popBreak(randomOrder(j-3:j),:);

    dists=eachPathDis(randomOrder(j-3:j));
    [ignore,index]=min(dists);
    bestOf4Route=rts(index,:);
    bestOf4Break=brs(index,:);
    routeInsertionPoints = sort(ceil(n*rand(1,2)));
    I = routeInsertionPoints(1);
    J = routeInsertionPoints(2);
    for k=1:4
        tmpPopRoute(k,:)=bestOf4Route;
        tmpPopBreak(k,:)=bestOf4Break;
    end        
    for k=1:4
        switch k
            case 2
                tmpPopRoute(k,I:J)=tmpPopRoute(k,J:-1:I);
            case 3
                tmpPopBreak(k,:)=rand_breaks(nSalemen,minTour,n);
            case 4
                tmpPopRoute(k,I:J)=tmpPopRoute(k,J:-1:I);
                tmpPopBreak(k,:)=rand_breaks(nSalemen,minTour,n);%                 
            otherwise
        end           
    end
    newPopRoute(j-3:j,:)=tmpPopRoute;
    newPopBreak(j-3:j,:)=tmpPopBreak;        
end
popRoute=newPopRoute;
popBreak=newPopBreak;
%改进部分完成,但是好像还有点问题
%计算改进后的路径距离
 for j=1:popSize
    pRoute=popRoute(j,:);
    pBreak=popBreak(j,:);
    d=0;
    rngs=[[1 pBreak+1];[pBreak n]]';
    for k=1:nSalemen
        for p=rngs(k,1):rngs(k,2)-1
            d=d+cityDist(pRoute(p),pRoute(p+1));
        end
        d=d+cityDist(pRoute(rngs(k,1)),pRoute(rngs(k,2)));
    end
    newEachPathDis(j)=d;
 end
 %然后更新全局和个体最优
 [minNewPath,idx]=min(newEachPathDis);
 if minNewPath<globalBestFitness
     globalBestFitness=minNewPath;
     for k=1:popSize
         globalBestRoute(k,:)=popRoute(idx,:);
         globalBestBreak(k,:)=popBreak(idx,:);
     end

 end
IsChange=newEachPathDis<indivdualBestFitness;
indivdualBestRoute(find(IsChange),:)=popRoute(find(IsChange),:);
indivdualBestBreak(find(IsChange),:)=popBreak(find(IsChange),:);

end
subplot(2,2,2);

plot((1:maxIter),globalBest(1:maxIter));
title(sprintf('迭代后的最优结果是:%1.4f',globalBest(maxIter)));
pRoute=globalBestRoute(1,:);
pBreak=globalBestBreak(1,:);
subplot(2,2,3);
pathPlot(pRoute,pBreak,city,nSalemen,n);
title(sprintf('最后的路由'));

%迭代结束

function Hold=HoldByOdds(Hold,odds)
[x y]=size(Hold);
for i=1:x
for j=1:y
if rand>odds
Hold(i,j)=0;
end
end
end

end

function changeNums=GenerateChangeNums(popRoute,BestRoute)
[x y]=size(popRoute);
changeNums=zeros(x,y);
for i=1:x
pop=BestRoute(i,:);
pop1=popRoute(i,:);
for j=1:y
NoFromBestVar=pop(j);%y选择的是最优的某个位置
for k=1:y
NoFromRoute=pop1(k);%k是该粒子的某个位置
if (NoFromRoute==NoFromBestVar)&&(j~=k)
changeNums(i,j)=k;%i,j表示最优粒子的某行某列,里面的值是粒子的某列
pop1(k)=pop1(j);
pop1(j)=NoFromRoute;
end
end
end
end
end

function Route=PathExchange(popRoute,Hold)
[x y]=size(popRoute);
for i=1:x
pop=popRoute(i,:);
a=Hold(i,:);
for j=1:y
if a(1,j)~=0
pop1=pop(1,j);
pop(1,j)=pop(1,a(1,j));
pop(1,a(1,j))=pop1;
end
end
Route(i,:)=pop;
end
end

function pathPlot(pRoute,pBreak,city,nSalemen,n)
clr=[1 0 0;0 0 1;0.67 0 1;0 1 0;1 0.5 0];
rngs=[[1 pBreak+1];[pBreak n]]';
for i=1:nSalemen
rtes=pRoute([rngs(i,1):rngs(i,2) rngs(i,1)]);
plot(city(rtes,1),city(rtes,2),'.-','Color',clr(i,:));
hold on;
end
end

function breaks=rand_breaks(nSalemen,minTour,n)
nBreak=nSalemen-1;%4
dof=n-minTour*nSalemen;
addto=ones(1,dof+1);
for k=2:nBreak
addto=cumsum(addto);
end
cumProb=cumsum(addto)/sum(addto);
if minTour==1
tmpBreaks=randperm(n-1);
breaks=sort(tmpBreaks(1:nBreak));
else
nAdjust=find(rand<cumProb,1)-1;
spaces=ceil(nBreak*rand(1,nAdjust));
adjust=zeros(1,nBreak);
for kk=1:nBreak
adjust(kk)=sum(spaces==kk);
end
breaks=minTour*(1:nBreak)+cumsum(adjust);
end
end

3个回答

敢问楼主,对于带约束的多目标问题,约束支配的程序应该怎么编写?先行谢过~

cityDist(i,j)=sqrt((city(i,1)-city(j,1)).^2+(city(i,2)-city(i,2)).^2);
最后一个i改为j就对了

我运行一遍 为什么说 未定义函数或变量 'rand_breaks'。 求解 急

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
训练1400个样本数据,用pso优化SVM大概需要多长时间?还是说,这个时间和训练数据的数量有关?(我用的matlab)
最近在用pso优化svm中的参数,用matlab运行的时间比较长,大概好几分钟吧,想问下这个优化一般需要多长时间? 还是说我的程序不好,所以运行时间长。
C语言pso粒子群算法的初始化以及对种群中适应度高的粒子筛选问题
int initialize(int id) { /*由当前时间产生随机数种子*/ srand((unsigned)time(NULL)+10*id); FILE *infile; /*初始化数据文件,记录坐标及速度上下限*/ int i, j; /*i:维度循环参数,j:粒子群循环参数*/ double lbound, ubound, Vlbound, Vubound; /*记录由初始化数据文件中读入的各维度坐标和速度上下限*/ char filename[256]; sprintf(filename,"initialdata%d",id); //printf("filename is %s\n",filename); if((infile = fopen(filename,"r"))==NULL) { fprintf(psolog,"\nCannot open input file!\n"); exit(1); } for(i=0;i<DIMENSION;i++) { /*读入各方向位置及速度上下限*/ fscanf(infile, "%lf", &lbound); fscanf(infile, "%lf", &ubound); fscanf(infile, "%lf", &Vlbound); fscanf(infile, "%lf", &Vubound); /*将速度上下限循环写入各粒子结构体中,并由之随机产生初始位置及速度*/ for(j=0;j<POPSIZE;j++) { particle[j].lowbound[i]=lbound; particle[j].upbound[i]=ubound; particle[j].low_V[i]=Vlbound; particle[j].up_V[i]=Vubound; particle[j].position[id][i]=randval(lbound, ubound); particle[j].velocity[id][i]=randval(Vlbound, Vubound); particle[j].fitness[id] = 0; } } fclose(infile); return 0; } int select1(int n) { double sum_fit,r_fitness; /*该种群当前最优适应度总和以及存储前mem个粒子适应度和的变量*/ int i,j,k; double p; /*记录随机数*/ sum_fit=0; for(i=0;i<POPSIZE;i++) { sum_fit+=particle[i].fitness[MAXSHIFT]; } for(i=0;i<POPSIZE;i++) { r_fitness=0; for(j=0;j<i+1;j++) { r_fitness+=particle[j].fitness[MAXSHIFT]; } particle[i].r_fit = r_fitness/sum_fit; } /*开始优选*/ for(i=0;i<POPSIZE;i++) { p=(double)(rand()%1000)/1000; if(p<particle[0].r_fit) { particle[i].fitness[n]=particle[0].fitness[n]; particle[i].fitness[MAXSHIFT]=particle[0].fitness[MAXSHIFT]; for(k=0;k<DIMENSION;k++) { particle[i].position[n][k] = particle[0].position[n][k]; particle[i].velocity[n][k] = particle[0].velocity[n][k]; particle[i].position[MAXSHIFT][k] = particle[0].position[MAXSHIFT][k]; particle[i].velocity[MAXSHIFT][k] = particle[0].velocity[MAXSHIFT][k]; } } for(j=1;j<POPSIZE;j++) { if((p>particle[j-1].r_fit)&&(p<particle[j].r_fit)) { particle[i].fitness[n]=particle[j].fitness[n]; particle[i].fitness[MAXSHIFT]=particle[j].fitness[MAXSHIFT]; for(k=0;k<DIMENSION;k++) { particle[i].position[n][k] = particle[j].position[n][k]; particle[i].velocity[n][k] = particle[j].velocity[n][k]; particle[i].position[MAXSHIFT][k] = particle[j].position[MAXSHIFT][k]; particle[i].velocity[MAXSHIFT][k] = particle[j].velocity[MAXSHIFT][k]; } } } } }
求问有没有办法实现PSO中粒子的和值为固定?求指教
目前在做毕设,需要一个算法求一天24小时状态,每天必训完成循环,因此我将粒子的每一维假设成为单位时间的改变量。但是我个人无法实现使一天的循环之后回到出状态。希望大神们速速现身解答。跪谢
基本遗传算法和基本粒子群算法 在解决离散型问题上的比较?
如题,请问大家在解决离散型的问题上,比如TSP问题,基本的GA和基本PSO有何区别呢? 哪个更好些呢? 对这两种算法了解的亲,请分享下经验吧~谢啦!
关于前后台交互类型转换谁来处理的问题讨论
背景简述: 移动前端页面需要增加一个针对一个Int对应的文字枚举翻译;对于这个工作谁来做,接口提供人员(A)和前端开发人员(B)产生了意见分歧。 **前端B:**建议后台处理好返回给前端;原因是:① 这样不影响客户端使用的性能;②有其他开发后台处理过,前端不用过多的干涉; > (前端只做展现文字,请求接口依然是传递int类型字段) **后台接口A:**建议前端处理,理由是:①可以减少DB的压力,毕竟DB属于稀缺资源;在高并发时可能体现更明显;②有Case WHEN上的标量计算损耗;③传递字段少了,也减少了网络传输的大小; 其实,在用户量少的情况下,都无所谓; **Q:**也是想请教一下各位同道中人,在你们的日常工作中,一般怎么处理类似问题。 **附加:** 其实SQL很简单的, SELECT ROW_NUMBER() OVER(ORDER BY pso.SettlementTime DESC) AS RowNumber, oi.ID AS Order_InfoID, oi.UserName, pso.AftertaxAmount, pso.CommissionPayType, CASE pso.CommissionPayType WHEN 1 THEN '线索奖励' WHEN 2 THEN '成交奖励' ELSE '其他' END AS CommissionPay, pso.SettlementTime FROM Pay_SettlementOrder AS pso WITH (NOLOCK) INNER JOIN Order_Info AS oi WITH (NOLOCK) ON pso.PlatformOrderId = oi.ID WHERE oi.IsDel = 0 AND oi.PlatformAgentID > 0 AND pso.PayState = 2;
关于逻辑语句&用法问题
本人在使用逻辑语句时出现了一个错误 Error using & Inputs must have the same size. 如图 但是不知道哪里错了,感觉程序没问题啊 function [pso G] = pso_3D() %region=zeros(3,2); d=[-3,3;-3,3;-3,3]; a=[1,2,3;2,3,4;3,4,5;1,3,5;-2,-1,1;-3,-2,-1;-2,-1,2]; for j=1:7; if Region_in(a(j,:),d) pso=1; end end function flag=Region_in(b,c) flag=1 for j=1:3 flag=flag&(b(1:j)>=c(j,1))&(b(1:j)<=c(j,2)); end ``` ``` ![图片说明](https://img-ask.csdn.net/upload/201703/30/1490864461_865092.jpg)
想表示30个m行n列的数据用matlab 怎么实现?
在做pso优化rbf神经网络,pso算法若用矩阵编码策略,想表示30个m行n列的数据用matlab 怎么实现?
超参数优化时,验证集中正确率很高,测试集中正确率下降
最近在做核参数的优化,我使用了网格搜索和PSO,两个都出现这个问题。超参数在验证集上表现很好,但是利用该参数进行模型训练和测试,正确率明显下降(有些可能会上升),请问大家这是什么问题? 优化流程:原始数据进行10-fold crossvalidation分成训练集和测试集,在训练集中对每次寻优超参数进行5-fold crossvalidation,找出验证集中表现最优的参数。使用该参数和训练集整体进行模型训练,最后用测试集进行测试,正确率下降了
关于打印机驱动字体设置的问题
HOOK截获打印数据,BOOL APIENTRY OEMTextOut( SURFOBJ *pso, STROBJ *pstro, FONTOBJ *pfo, CLIPOBJ *pco, RECTL *prclExtra, RECTL *prclOpaque, BRUSHOBJ *pboFore, BRUSHOBJ *pboOpaque, POINTL *pptlOrg, MIX mix ); typedef struct _FONTOBJ { ULONG iUniq; ULONG iFace; ULONG cxMax; FLONG flFontType; ULONG_PTR iTTUniq; ULONG_PTR iFile; SIZE sizLogResPpi; ULONG ulStyleSize; PVOID pvConsumer; PVOID pvProducer; } FONTOBJ; 有人搞过打印机驱动吗,帮我解释一下,函数参数的意思,以及_FONTOBJ这个结构体里面字段的意思。非常感谢
标准粒子群中的一部分程序不理解
if rand>0.5 k=ceil(2*rand); if k == 1 pop(j,k) = (20-1)*rand+1; end if k == 2 pop(j,k) = (pso_option.popgmax-pso_option.popgmin)*rand + pso_option.popgmin; end end 这是标准粒子群中的一部分程序,这个怎么理解?
C# 多线程,记录每个线程运行时间
本人菜鸟,在校学生。 最近在学习多线程技术,实现了一个求解数组中最小值的方法,但是在测试多线程与单线程的计算速度时,却不知道那个才是多线程的运行时间(尴尬到窒息!) *多线程求数组中最小值思想:将一个数组分为两个等大的子数组,并新建两个子线程分别求解每个子数组中的最小值,保存在一个全局变量中。* 源程序如下: using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Diagnostics; namespace Multithread_PSO { class Program { //定义锁 private static readonly object locker = new object(); static void Main(string[] args) { //元素个数 int EleCounts = 100000; //待处理数组 int[] MyArr = new int[EleCounts]; //前半段数组 int[] TempArr1 = new int[EleCounts / 2]; //后半段数组 int[] TempArr2 = new int[EleCounts / 2]; for (int i = 0; i < EleCounts; i++) { int iSeed = DateTime.Now.Millisecond; Random rd = new Random(iSeed+i); //随机给数组赋值 MyArr[i] = rd.Next(EleCounts); //将数组拆分为两个大小相等的数组 if(i<EleCounts/2) { TempArr1[i] = MyArr[i]; } else { TempArr2[i - EleCounts / 2] = MyArr[i]; } } //主线程 FindMinElement(MyArr); //新建两个线程th1,th2 Thread th1 = new Thread(new ParameterizedThreadStart(thFindMinElement)); th1.Name = "子线程1"; Thread th2 = new Thread(new ParameterizedThreadStart(thFindMinElement)); th2.Name = "子线程2"; Stopwatch sw = new Stopwatch(); sw.Start(); th1.Start(TempArr1); //th1.Join(); th2.Start(TempArr2); //th2.Join(); sw.Stop(); TimeSpan ts2 = sw.Elapsed; Console.WriteLine("多线程获得最小值为: {0}, 计时器3共耗时:{1}/ms!\n", MinValue, ts2.TotalMilliseconds); Console.ReadKey(); } public static void thFindMinElement(object DivMyArr) { Stopwatch sw = new Stopwatch(); sw.Start(); string ThNumber = Thread.CurrentThread.ManagedThreadId.ToString(); int[] MyArr = (int[])DivMyArr; if (IsFirstRun) { MinValue = MyArr[0]; IsFirstRun = false; } for (int i = 1; i < MyArr.Length; i++) { if (MinValue > MyArr[i]) MinValue = MyArr[i]; } sw.Stop(); TimeSpan ts2 = sw.Elapsed; Console.WriteLine("当前线程名称(ID)为:{1} ({0}),最小值为:{2},共耗时:{3}/ms!\n", ThNumber, Thread.CurrentThread.Name, MinValue, ts2.TotalMilliseconds); } public static void FindMinElement(int[] DivMyArr) { Stopwatch sw = new Stopwatch(); sw.Start(); string ThNumber = Thread.CurrentThread.ManagedThreadId.ToString(); int[] MyArr = DivMyArr; MinValue = MyArr[0]; for (int i = 1; i < MyArr.Length; i++) { if (MinValue > MyArr[i]) MinValue = MyArr[i]; } sw.Stop(); TimeSpan ts2 = sw.Elapsed; Console.WriteLine("主线程ID为:{0},最小值为: {1}, 共耗时:{2}/ms!\n", ThNumber, MinValue, ts2.TotalMilliseconds); } private static int minValue; private static bool IsFirstRun = true; private static int MinValue { get { lock (locker) { return minValue; } } set { minValue = value; } } } } ***问题1:*** 如果不添加 th1.Join()和 th2.Join(),运行结果如下,请问计时器3是多线程运行时间吗? ![图片说明](https://img-ask.csdn.net/upload/201705/04/1493881888_346609.png) ***问题2:*** 如果添加 th1.Join()和 th2.Join(),运行结果如下,请问计时器3是多线程运行时间吗? ![图片说明](https://img-ask.csdn.net/upload/201705/04/1493881971_593742.png) ***问题3:*** 如果均不是,那该怎么计算多线程的总运行时间呢,还望大神不吝赐教!!!
关于虚拟打印机坐标问题
微软的虚拟打印机驱动,HOOK到 BOOL APIENTRY OEMTextOut( SURFOBJ *pso, STROBJ *pstro, FONTOBJ *pfo, CLIPOBJ *pco, RECTL *prclExtra, RECTL *prclOpaque, BRUSHOBJ *pboFore, BRUSHOBJ *pboOpaque, POINTL *pptlOrg, MIX mix ) STROBJ *pstro, 这个参数包含实际打印数据,和坐标,但是这个坐标貌似不是实际要打印的坐标。要怎么转换? FONTOBJ *pfo, 这个是字体参数,怎么转换成实际多宽多高的字体呢? 我在这个函数中加入winddi.h中的接口(如:FONTOBJ_pxoGetXform),怎么老是报未声明的外部符号,我已经加了头文件,和lib了。 望哪位弄个这方面的大神指导一下,小弟万分感激!
c语言编的粒子群算法,迭代过程中目标函数值一直不变
用c语言编了一个粒子群算法,但是迭代过程中目标函数值一直没有变化,不知道是哪里出问题了,请帮忙看一下 以下是代码: /* * 使用C语言实现粒子群算法(PSO) * 参考自《MATLAB智能算法30个案例分析》 * https://www.cnblogs.com/lyrichu/p/6151272.html */ #include<stdio.h> #include<stdlib.h> #include<math.h> #include<time.h> #define C1 1.49445 /*加速度因子一般是根据大量实验所得*/ #define C2 1.49445 #define maxgen 3000 /*迭代次数*/ #define sizepop 2000 /*种群规模*/ #define popmax 10 /*个体最大取值*/ #define popmin 0 /*个体最小取值*/ #define Vmax 1 /*速度最大值*/ #define Vmin 0 /*速度最小值*/ /*#define dim 2 // 粒子的维数*/ #define q 5 #define T 12 #define delta 0.995 #define c1 0.5 #define c2 0.15 #define c3 0.37 #define c4 0.9 #define c5 0.9 #define rt 10.0 #define I 170.0 #define x_a0 5.0 #define x_a6 5.0 #define x_d 7.0 #define Po 2.0 #define Pm 5.0 #define K 12 #define Ko 1.0 #define Km 5.0 #define PI 3.1415926 /*圆周率*/ int dim; /*粒子的维数*/ double fitnessgbest; /* 群体极值适应度值*/ double **pop,**V,*fitness,*result,**pbest,*fitnesspbest,**genbest,*gbest; /*适应度函数*/ double func(double * arr) { int i, N = 6; double *x_a, *obj, temp, fit, sum = 0.0; x_a = (double *)malloc(dim*sizeof(double)); obj = (double *)malloc(N*sizeof(double)); x_a[0] = x_a0; for (i=1;i<dim;i++) { if (*(arr + i - 1) < x_a[i - 1]) x_a[i] = *(arr + i - 1); else x_a[i] = x_a[i - 1]; if (i == 5) x_a[i] = x_a6; } for (i=0;i<N;i++) obj[i] = 0.0; for (i=0;i<q;i++) { temp = *(arr + i); /*printf("%d\t%lf\t%lf",i,temp/x_a[i] * Po / Pm,log(temp/x_a[i] * Po / Pm));*/ obj[0] += pow(delta,i) * c1 * log(temp/x_a[i] * Po / Pm); sum += temp; } for (i=q;i<T;i++) { temp = *(arr + i); obj[1] += pow(delta,i) * c2 * log(temp/rt * i /K ); obj[2] += c3 * temp * Ko / Km ; if (*(arr + i) <= x_a[i]) obj[3] += c4 * log(temp/x_a[i]); else obj[3] += c4 * log(temp/x_d); sum += temp; } /*约束0<=sum x_i <=I作为惩罚函数加入目标函数中*/ if (sum > I) obj[4] = (sum - I) * (sum - I) / I / I; else if (sum < 0) obj[4] = sum * sum / I / I; else obj[4] = 0.0; /*约束0<=t/k*xi/rt <=1作为惩罚函数加入目标函数中*/ for (i=q;i<T;i++) { temp = *(arr + i); if (temp> 1) sum += ( temp - 1) * (temp - 1); else if (temp < 0) sum += temp * temp; else sum += 0.0; } obj[5] = sum; /*如果还有其它约束,同样以惩罚函数的方式处理*/ fit = 0.0; for (i=0;i<N;i++) fit += obj[i]; free(x_a); x_a = NULL; free(obj); obj = NULL; fit = -fit;/*模型是最大化,目标改为最小化*/ return fit; } /* 种群初始化*/ void pop_init(void) { int i,j; for(i=0;i<sizepop;i++) { for(j=0;j<dim;j++) { pop[i][j] = popmin + (((double)rand())/RAND_MAX)*(popmax-popmin); /*-2到2之间的随机数*/ V[i][j] = Vmin + (((double)rand())/RAND_MAX)*(Vmax-Vmin); /*-0.5到0.5之间*/ } fitness[i] = func(pop[i]); /*计算适应度函数值*/ } } /* max()函数定义*/ double * max(double * fit,int size) { int index = 0; /* 初始化序号*/ int i; double max = *fit; /* 初始化最大值为数组第一个元素*/ static double best_fit_index[2]; for(i=1;i<size;i++) { if(*(fit+i) > max) max = *(fit+i); index = i; } best_fit_index[0] = index; best_fit_index[1] = max; return best_fit_index; } /* 迭代寻优*/ void PSO_func(void) { pop_init(); double * best_fit_index; /* 用于存放群体极值和其位置(序号)*/ int i,j,k; best_fit_index = max(fitness,sizepop); /*求群体极值*/ int index = (int)(*best_fit_index); /* 群体极值位置*/ for(i=0;i<dim;i++) { gbest[i] = pop[index][i]; } /* 个体极值位置*/ for(i=0;i<sizepop;i++) { for(j=0;j<dim;j++) { pbest[i][j] = pop[i][j]; } } /* 个体极值适应度值*/ for(i=0;i<sizepop;i++) { fitnesspbest[i] = fitness[i]; } /*群体极值适应度值*/ double bestfitness = *(best_fit_index+1); fitnessgbest = bestfitness; /*迭代寻优*/ for(i=0;i<maxgen;i++) { for(j=0;j<sizepop;j++) { /*速度更新及粒子更新*/ for(k=0;k<dim;k++) { /* 速度更新*/ double rand1 = (double)rand()/RAND_MAX; /*0到1之间的随机数*/ double rand2 = (double)rand()/RAND_MAX; V[j][k] = V[j][k] + C1*rand1*(pbest[j][k]-pop[j][k]) + C2*rand2*(gbest[k]-pop[j][k]); if(V[j][k] > Vmax) V[j][k] = Vmax; if(V[j][k] < Vmin) V[j][k] = Vmin; /* 粒子更新*/ pop[j][k] = pop[j][k] + V[j][k]; if(pop[j][k] > popmax) pop[j][k] = popmax; if(pop[j][k] < popmin) pop[j][k] = popmin; } fitness[j] = func(pop[j]); /*新粒子的适应度值*/ } for(j=0;j<sizepop;j++) { /* 个体极值更新*/ if(fitness[j] > fitnesspbest[j]) { for(k=0;k<dim;k++) { pbest[j][k] = pop[j][k]; } fitnesspbest[j] = fitness[j]; } /* 群体极值更新*/ if(fitness[j] > fitnessgbest) { for(k=0;k<dim;k++) gbest[k] = pop[j][k]; fitnessgbest = fitness[j]; } } for(k=0;k<dim;k++) { genbest[i][k] = gbest[k]; /* 每一代最优值取值粒子位置记录*/ } result[i] = fitnessgbest; /* 每代的最优值记录到数组*/ } } /* 主函数*/ int main(void) { clock_t start,finish; /*程序开始和结束时间*/ int i; FILE *fp; start = clock(); /*开始计时*/ dim = T; pop = (double**)malloc(sizeof(double*)*sizepop); V = (double**)malloc(sizeof(double*)*sizepop); pbest = (double**)malloc(sizeof(double*)*sizepop); genbest = (double**)malloc(sizeof(double*)*maxgen); for(i=0;i<sizepop;i++){ pop[i]=(double*)malloc(sizeof(double)*dim); /* 创建种群数组*/ V[i]=(double*)malloc(sizeof(double)*dim); /* 创建种群速度数组*/ pbest[i]=(double*)malloc(sizeof(double)*dim); /* 个体极值的位置*/ } for(i=0;i<maxgen;i++) genbest[i]=(double*)malloc(sizeof(double)*dim); /*每一代最优值取值粒子*/ fitness = (double *)malloc(sizepop*sizeof(double)); /*创建种群的适应度数组*/ result = (double *)malloc(maxgen*sizeof(double)); /*创建存放每次迭代种群最优值的数组*/ gbest = (double *)malloc(dim*sizeof(double)); /*群体极值的位置*/ fitnesspbest = (double *)malloc(sizepop*sizeof(double)); /*个体极值适应度的值*/ srand((unsigned)time(NULL)); /* 初始化随机数种子*/ PSO_func(); double * best_arr; best_arr = max(result,maxgen); int best_gen_number = *best_arr; /* 最优值所处的代数*/ double best = *(best_arr+1); /*最优值*/ printf("迭代了%d次,在第%d次取到最优值,最优值为:%lf.\n",maxgen,best_gen_number+1,best); if((fp=fopen("x_best.txt","w"))==NULL) { printf("file x_best.txt cannot open \n"); exit(-1); } else { for (i=0;i<dim;i++) fprintf(fp,"%lf\n", genbest[best_gen_number][i]); } printf("取到最优值的位置已输出到x_best.txt\n"); fclose(fp); if((fp=fopen("objective.txt","w"))==NULL) { printf("file objective.txt cannot open \n"); exit(-1); } else { for (i=0;i<maxgen;i++) fprintf(fp,"%lf\n", result[i]); } printf("取到最优值的位置已输出到objective.txt\n"); fclose(fp); finish = clock(); /*结束时间*/ double duration = (double)(finish - start)/CLOCKS_PER_SEC; /* 程序运行时间*/ printf("程序运行耗时:%lf\n",duration); return 0; }
关于MATLAB的&用法错误
我在该论坛下载了一个2D的粒子群算法,但本人想解决的是3维问题,因此想把程序改成3维的。但是将程序中的partsize设置成为3之后,也把region的矩阵改成[-3,3;-3,3;-3,3],但是运行时提示错误, Error using & Inputs must have the same size. Error in pso_2D>Region_in (line 110) flag=flag&(pos_present(1:j)>=region(j,1))&(pos_present(1:j)<=region(j,2)); Error in pso_2D (line 69) if (arr_present(j,end)>pbest(j,end))&(Region_in(arr_present(j,:),region)) 这两段程序在改成3之前还是好好的,为什么改成3之后就错了,附全部程序 function [pso F] = pso_2D() % FUNCTION PSO --------USE Particle Swarm Optimization Algorithm %global present; % close all; pop_size = 10; % pop_size 种群大小 part_size = 3; % part_size 粒子大小, ** =n-D gbest = zeros(1,part_size+1); % gbest 当前搜索到的最小的值 max_gen = 80; % max_gen 最大迭代次数 region=zeros(part_size,2); % 设定搜索空间范围 region=[-3,3;-3,3;-3,3]; % **每一维设定不同范围 rand('state',sum(100*clock)); % 重置随机数发生器状态 arr_present = ini_pos(pop_size,part_size); % present 当前位置,随机初始化,rand()的范围为0~1 v=ini_v(pop_size,part_size); % 初始化当前速度 pbest = zeros(pop_size,part_size+1); % pbest 粒子以前搜索到的最优值,最后一列包括这些值的适应度 w_max = 0.9; % w_max 权系数最大值 w_min = 0.4; v_max = 2; % **最大速度,为粒子的范围宽度 c1 = 2; % 学习因子 c2 = 2; % 学习因子 best_record = zeros(1,max_gen); % best_record记录最好的粒子的适应度。 % ———————————————————————— % 计算原始种群的适应度,及初始化 % ———————————————————————— arr_present(:,end)=ini_fit(arr_present,pop_size,part_size); pbest = arr_present; %初始化各个粒子最优值 [best_value best_index] = min(arr_present(:,end)); %初始化全局最优,即适应度为全局最小的值,根据需要也可以选取为最大值 gbest = arr_present(best_index,:); for i=1:max_gen w = w_max-(w_max-w_min)*i/max_gen; % 确定是否对打散已经收敛的粒子群—————————————————————————————— reset = 0; % reset = 1时设置为粒子群过分收敛时将其打散,如果=1则不打散 if reset==1 bit = 1; for k=1:part_size bit = bit&(range(arr_present(:,k))<0.1); end if bit==1 % bit=1时对粒子位置及速度进行随机重置 arr_present = ini_pos(pop_size,part_size); % present 当前位置,随机初始化 v = ini_v(pop_size,part_size); % 速度初始化 for k=1:pop_size % 重新计算适应度 arr_present(k,end) = fitness(arr_present(k,1:part_size)); end warning('粒子过分集中!重新初始化……'); % 给出信息 display(i); end end for j=1:pop_size v(j,:) = w.*v(j,:)+c1.*rand.*(pbest(j,1:part_size)-arr_present(j,1:part_size))... +c2.*rand.*(gbest(1:part_size)-arr_present(j,1:part_size)); % 粒子速度更新 (a) % 判断v的大小,限制v的绝对值小于5———————————————————————————— c = find(abs(v)>6); %**最大速度设置,粒子的范围宽度 v(c) = sign(v(c))*6; %如果速度大于3.14则,速度为3.14 arr_present(j,1:part_size) = arr_present(j,1:part_size)+v(j,1:part_size); % 粒子位置更新 (b) arr_present(j,end) = fitness(arr_present(j,1:part_size)); if (arr_present(j,end)>pbest(j,end))&(Region_in(arr_present(j,:),region)) % 根据条件更新pbest,如果是最小的值为小于号,相反则为大于号 pbest(j,:) = arr_present(j,:); end end [best best_index] = min(arr_present(:,end)); % 如果是最小的值为min,相反则为max if best>gbest(end)&(Region_in(arr_present(best_index,:),region)) % 如果当前最好的结果比以前的好,则更新最优值gbest,如果是最小的值为小于号,相反则为大于号 gbest = arr_present(best_index,:); end best_record(i) = gbest(end); end pso = gbest; %display(gbest); % *************************************************************************** % 计算适应度 % *************************************************************************** function fit = fitness(present) fit=3*(1-present(1)).^2.*exp(-(present(1).^2) - (present(2)+1).^2) ... %**需要求极值的函数,本例即peaks函数 - 10*(present(1)/5 - present(1).^3 - present(2).^5).*exp(-present(1).^2-present(2).^2) ... - 1/3*exp(-(present(1)+1).^2 - present(2).^2)+present(3); function ini_present=ini_pos(pop_size,part_size) ini_present = 3*rand(pop_size,part_size+1); %初始化当前粒子位置,使其随机的分布在工作空间 %** 6即为自变量范围 function ini_velocity=ini_v(pop_size,part_size) ini_velocity =3/2*(rand(pop_size,part_size)); %初始化当前粒子速度,使其随机的分布在速度范围内 function flag=Region_in(pos_present,region) [m n]=size(pos_present); flag=1; for j=1:n-1 flag=flag&(pos_present(1:j)>=region(j,1))&(pos_present(1:j)<=region(j,2)); end function arr_fitness=ini_fit(pos_present,pop_size,part_size) for k=1:pop_size arr_fitness(k,1) = fitness(pos_present(k,1:part_size)); %计算原始种群的适应度 end ``` ```
写了个java多线程下载器,但只有文件的部分内容下载成功。求大神!
import java.net.*; import java.io.*; class Test { //定义文件大小 private static int fileLength; //定义文件保存路径 private static String fileDirection; //定义线程数量 private static int threadNum; //定义线程组 private static Threads[] threads; //定义资源下载路径 private static String webDirection; /** * 默认构造器 * */ public Test(){} /** * 构造器: * 初始化threadNum(线程数量),fileDirection(文件保存路径),webDirection(资源下载路径) * */ public Test(int threadNum, String fileDirection, String webDirection) { this.threadNum = threadNum; this.fileDirection = fileDirection; this.webDirection = webDirection; //初始化threads数量。 threads = new Threads[threadNum]; } public static void downLoad() throws Exception { URL url = new URL(webDirection); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setRequestProperty("Accept", "*/*"); conn.setRequestProperty("Accept", "image/gif, image/jpeg, image/pjpeg, image/pjpeg, " + "application/x-shockwave-flash, application/xaml+xml, " + "application/vnd.ms-xpsdocument, application/x-ms-xbap, " + "application/x-ms-application, application/vnd.ms-excel, " + "application/vnd.ms-powerpoint, application/msword, */*"); conn.setRequestProperty("Charset", "UTF-8"); //获取连接 conn.connect(); //输出连接响应代码 System.out.println(conn.getResponseCode()); //获得文件大小 fileLength = conn.getContentLength(); //关闭连接 conn.disconnect(); //设置每条线程下载部分的大小 int subLength = fileLength / threadNum + 1; //设置本地文件的大小 RandomAccessFile file = new RandomAccessFile(fileDirection, "rw"); file.setLength(fileLength); file.close(); //以循环的方式来开始每一条线程 for (int i = 0; i < threadNum; i++) { //计算每条线程的下载的开始位置 int startPoint = i * subLength; //每条线程使用一个RandomAccessFile进行下载 RandomAccessFile subFile = new RandomAccessFile(fileDirection, "rw"); //定位该线程的下载位置 subFile.seek(startPoint); //初始化该线程 threads[i] = new Threads(subLength, startPoint, subFile, webDirection); //启动线程 threads[i].start(); } } } class Threads extends Thread { //定义该线程的下载位置 private static int startPoint; //当前线程需要下载的文件块 private static RandomAccessFile subFile; //定义资源的下载路径 private static String webDirection; //定义当前线程需要下载的问文件大小 private static int subLength; //定义已下载文件字节数 private static int length; /** * 构造器: * 初始化sublength,startPoint,subFile,webDirection * */ public Threads(int sublength, int startPoint, RandomAccessFile subFile, String webDirection) { this.startPoint = startPoint; this.subLength = sublength; this.subFile = subFile; this.webDirection = webDirection; } @Override public void run() { try { URL url = new URL(webDirection); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(1000); conn.setRequestProperty("Accept", "image/gif, image/jpeg, image/pjpeg, image/pjpeg, " + "application/x-shockwave-flash, application/xaml+xml, " + "application/vnd.ms-xpsdocument, application/x-ms-xbap, " + "application/x-ms-application, application/vnd.ms-excel, " + "application/vnd.ms-powerpoint, application/msword, */*"); conn.setRequestProperty("Accept-Language", "zh-CN"); conn.setRequestProperty("Charset", "UTF-8"); conn.connect(); //获取一个输出流, InputStream input = conn.getInputStream(); //是输出流跳过startpoint字节,表明该线程只下载自己负责的那一部分文件块 input.skip(startPoint); byte[] buffer = new byte[1024]; int hasNext = 0; //读取网络数据,并写入本地文件 while (length < subLength && (hasNext = input.read(buffer)) != -1) { subFile.write(buffer, 0, hasNext); //累计该线程的下载的总大小 length += hasNext; } input.close(); subFile.close(); } catch (Exception e) { } } } public class ThreadsDownload { public static void main(String[] args)throws Exception { // TODO Auto-generated method stub Test test = new Test(2, "C:\\Users\\Administrator\\Desktop\\music.txt", "http://shcm09.baidupcs.com/file/59980bec5eb499787dc6888f8c769620?bkt=p3-140059980bec5eb499787dc6888f8c769620847e32380000000003bc&fid=2283488641-250528-388951467231009&time=1484371050&sign=FDTAXGERLBH-DCb740ccc5511e5e8fedcff06b081203-%2FRxhx4PSo2A2tg6emD0bGTEM5DQ%3D&to=sh09vb&fm=Nan,B,M,mn&sta_dx=956&sta_cs=5&sta_ft=txt&sta_ct=0&sta_mt=0&fm2=Nanjing02,B,M,mn&newver=1&newfm=1&secfm=1&flow_ver=3&pkey=140059980bec5eb499787dc6888f8c769620847e32380000000003bc&sl=69926991&expires=8h&rt=pr&r=745301334&mlogid=314351329813847523&vuk=2283488641&vbdid=2298463801&fin=test.txt&fn=test.txt&slt=pm&uta=0&rtype=1&iv=0&isw=0&dp-logid=314351329813847523&dp-callid=0.1.1&csl=500&csign=Cfc%2B%2Bn4hgLFC3dLFpSY0MMKwS%2BE%3D"); test.downLoad(); }
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
win10系统安装教程(U盘PE+UEFI安装)
一、准备工作 u盘,电脑一台,win10原版镜像(msdn官网) 二、下载wepe工具箱  极力推荐微pe(微pe官方下载) 下载64位的win10 pe,使用工具箱制作启动U盘打开软件,   选择安装到U盘(按照操作无需更改) 三、重启进入pe系统   1、关机后,将U盘插入电脑 2、按下电源后,按住F12进入启动项选择(技嘉主板是F12)     选择需要启
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小人工智障。 思路可以运用在不同地方,主要介绍的是思路。
Nginx 软件层面加强Nginx性能优化的面试问答和解决方案
Nginx 软件层面加强Nginx性能优化的面试问答和解决方案 去年我去爱卡汽车面试PHP,一轮和二轮面的都不错,在三轮面到Nginx的时候很多问题当时不知道怎么回答,确实没有深入学习过,花了一段时间的学习,终于能解答Nginx高性能优化的问题了,10月24号为了获得程序员勋章,发布了半个优化笔记,浏览到了1000+,受到这个鼓舞,我抽时间在仔细整理下关于Nginx性能优化的问题,我们从软件说起。...
【管理系统课程设计】美少女手把手教你后台管理
【文章后台管理系统】URL设计与建模分析+项目源码+运行界面 栏目管理、文章列表、用户管理、角色管理、权限管理模块(文章最后附有源码) 1. 这是一个什么系统? 1.1 学习后台管理系统的原因 随着时代的变迁,现如今各大云服务平台横空出世,市面上有许多如学生信息系统、图书阅读系统、停车场管理系统等的管理系统,而本人家里就有人在用烟草销售系统,直接在网上完成挑选、购买与提交收货点,方便又快捷。 试想,若没有烟草销售系统,本人家人想要购买烟草,还要独自前往药...
11月19日科技资讯|华为明日发布鸿蒙整体战略;京东宣告全面向技术转型;Kotlin 1.3.60 发布
「极客头条」—— 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧。扫描上方二维码进入 CSDN App 可以收听御姐萌妹 Style 的人工版音频哟。 一分钟速览新闻点! 6G 专家组成员:速率是 5G 的 10 至 100 倍,预计 2030 年商用 雷军:很多人多次劝我放弃WPS,能坚持下来并不是纯粹的商业决定 ...
C语言魔塔游戏
很早就很想写这个,今天终于写完了。 游戏截图: 编译环境: VS2017 游戏需要一些图片,如果有想要的或者对游戏有什么看法的可以加我的QQ 2985486630 讨论,如果暂时没有回应,可以在博客下方留言,到时候我会看到。 下面我来介绍一下游戏的主要功能和实现方式 首先是玩家的定义,使用结构体,这个名字是可以自己改变的 struct gamerole { char n
化繁为简 - 腾讯计费高一致TDXA的实践之路
导语:腾讯计费是孵化于支撑腾讯内部业务千亿级营收的互联网计费平台,在如此庞大的业务体量下,腾讯计费要支撑业务的快速增长,同时还要保证每笔交易不错账。采用最终一致性或离线补...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
Java学习笔记(七十二)—— Cookie
概述 会话技术: 会话:一次会话中包含多次请求和响应 一次会话:浏览器第一次给服务器发送资源请求,会话建立,直到有一方断开为止 功能:在一次会话的范围内的多次请求间,共享数据 方式: 客户端会话技术:Cookie,把数据存储到客户端 服务器端会话技术:Session,把数据存储到服务器端 Cookie 概念:客户端会话技术,将数据存储到客户端 快速入门: 使用步骤: 创建C
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆  每天早上8:30推送 作者| Mr.K   编辑| Emma 来源| 技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯
程序员该看的几部电影
##1、骇客帝国(1999) 概念:在线/离线,递归,循环,矩阵等 剧情简介: 不久的将来,网络黑客尼奥对这个看似正常的现实世界产生了怀疑。 他结识了黑客崔妮蒂,并见到了黑客组织的首领墨菲斯。 墨菲斯告诉他,现实世界其实是由一个名叫“母体”的计算机人工智能系统控制,人们就像他们饲养的动物,没有自由和思想,而尼奥就是能够拯救人类的救世主。 可是,救赎之路从来都不会一帆风顺,到底哪里才是真实的世界?
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
@程序员,如何花式构建线程?
作者 |曾建责编 | 郭芮出品 | CSDN(ID:CSDNnews)在项目和业务的开发中,我们难免要经常使用线程来进行业务处理,使用线程可以保证我们的业务在相互处理之间可以保证原子性...
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布了 2019年国民经济报告 ,报告中指出:年末中国大陆总人口(包括31个
强烈推荐10本程序员在家读的书
很遗憾,这个鼠年春节注定是刻骨铭心的,新型冠状病毒让每个人的神经都是紧绷的。那些处在武汉的白衣天使们,尤其值得我们的尊敬。而我们这些窝在家里的程序员,能不外出就不外出,就是对社会做出的最大的贡献。 有些读者私下问我,窝了几天,有点颓丧,能否推荐几本书在家里看看。我花了一天的时间,挑选了 10 本我最喜欢的书,你可以挑选感兴趣的来读一读。读书不仅可以平复恐惧的压力,还可以对未来充满希望,毕竟苦难终
Linux自学篇——linux命令英文全称及解释
man: Manual 意思是手册,可以用这个命令查询其他命令的用法。 pwd:Print working directory 显示当前目录 su:Swith user 切换用户,切换到root用户 cd:Change directory 切换目录 ls:List files 列出目录下的文件 ps:Process Status 进程状态 mk
Python实战:抓肺炎疫情实时数据,画2019-nCoV疫情地图
文章目录1. 前言2. 数据下载3. 数据处理4. 数据可视化 1. 前言 今天,群里白垩老师问如何用python画武汉肺炎疫情地图。白垩老师是研究海洋生态与地球生物的学者,国家重点实验室成员,于不惑之年学习python,实为我等学习楷模。先前我并没有关注武汉肺炎的具体数据,也没有画过类似的数据分布图。于是就拿了两个小时,专门研究了一下,遂成此文。 2月6日追记:本文发布后,腾讯的数据源多次变更u
智力题(程序员面试经典)
NO.1  有20瓶药丸,其中19瓶装有1克/粒的药丸,余下一瓶装有1.1克/粒的药丸。给你一台称重精准的天平,怎么找出比较重的那瓶药丸?天平只能用一次。 解法 有时候,严格的限制条件有可能反倒是解题的线索。在这个问题中,限制条件是天平只能用一次。 因为天平只能用一次,我们也得以知道一个有趣的事实:一次必须同时称很多药丸,其实更准确地说,是必须从19瓶拿出药丸进行称重。否则,如果跳过两瓶或更多瓶药
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
2020年的1月,我辞掉了我的第一份工作
其实,这篇文章,我应该早点写的,毕竟现在已经2月份了。不过一些其它原因,或者是我的惰性、还有一些迷茫的念头,让自己迟迟没有试着写一点东西,记录下,或者说是总结下自己前3年的工作上的经历、学习的过程。 我自己知道的,在写自己的博客方面,我的文笔很一般,非技术类的文章不想去写;另外我又是一个还比较热衷于技术的人,而平常复杂一点的东西,如果想写文章写的清楚点,是需要足够...
别低估自己的直觉,也别高估自己的智商
所有群全部吵翻天,朋友圈全部沦陷,公众号疯狂转发。这两周没怎么发原创,只发新闻,可能有人注意到了。我不是懒,是文章写了却没发,因为大家的关注力始终在这次的疫情上面,发了也没人看。当然,我...
Java坑人面试题系列: 包装类(中级难度)
Java Magazine上面有一个专门坑人的面试题系列: https://blogs.oracle.com/javamagazine/quiz-2。 这些问题的设计宗旨,主要是测试面试者对Java语言的了解程度,而不是为了用弯弯绕绕的手段把面试者搞蒙。 如果你看过往期的问题,就会发现每一个都不简单。 这些试题模拟了认证考试中的一些难题。 而 “中级(intermediate)” 和 “高级(ad
Spring Boot 2.x基础教程:使用JdbcTemplate访问MySQL数据库
在第2章节中,我们介绍了如何通过Spring Boot来实现HTTP接口,以及围绕HTTP接口相关的单元测试、文档生成等实用技能。但是,这些内容还不足以帮助我们构建一个动态应用的服务端程序。不论我们是要做App、小程序、还是传统的Web站点,对于用户的信息、相关业务的内容,通常都需要对其进行存储,而不是像第2章节中那样,把用户信息存储在内存中(重启就丢了!)。 对于信息的存储,现在已经有非常非常多...
基于Python的人脸自动戴口罩系统
目录 1、项目背景 2、页面设计 3、器官识别 4、退出系统 1、项目背景 2019年新型冠状病毒感染的肺炎疫情发生以来,牵动人心,举国哀痛,口罩、酒精、消毒液奇货可居。 抢不到口罩,怎么办?作为技术人今天分享如何使用Python实现自动戴口罩系统,来安慰自己,系统效果如下所示: 本系统的实现原理是借助 Dlib模块的Landmark人脸68个关键点检测库轻松识别出人脸五官
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。   再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。   下文是原回答,希望能对你能有所启发。   如果我说,这个世界上人真的分三六九等,
节后首个工作日,企业们集体开晨会让钉钉挂了
By 超神经场景描述:昨天 2 月 3 日,是大部分城市号召远程工作的第一天,全国有接近 2 亿人在家开始远程办公,钉钉上也有超过 1000 万家企业活跃起来。关键词:十一出行 人脸...
Java基础知识点梳理
Java基础知识点梳理 摘要: 虽然已经在实际工作中经常与java打交道,但是一直没系统地对java这门语言进行梳理和总结,掌握的知识也比较零散。恰好利用这段时间重新认识下java,并对一些常见的语法和知识点做个总结与回顾,一方面为了加深印象,方便后面查阅,一方面为了学好java打下基础。 Java简介 java语言于1995年正式推出,最开始被命名为Oak语言,由James Gosling(詹姆
jQuery实现高仿QQ音乐
几个实现的效果看视频吧: bandicam 2020-02-05 16-28-20-127 动图很是不清楚 github地址奉上:https://github.com/tangmusenLiu/Large-warehouse https://github.com/tangmu
为什么听过很多道理,依然过不好这一生?
记录学习笔记是一个重要的习惯,不希望学习过的东西成为过眼云烟。做总结的同时也是一次复盘思考的过程。 本文是根据阅读得到 App上《万维钢·精英日课》部分文章后所做的一点笔记和思考。学习是一个系统的过程,思维模型的建立需要相对完整的学习和思考过程。以下观点是在碎片化阅读后总结的一点心得总结。
相关热词 c# 时间比天数 c# oracle查询 c# 主动推送 事件 c# java 属性 c# 控制台 窗体 c# 静态类存值 c#矢量作图 c#窗体调用外部程式 c# enum是否合法 c# 如何卸载引用
立即提问