2022.11.07 PM 02:30 by CBJ
來源 : https://drive.google.com/file/d/1CMnis82zw9hGQHW1pRv3LFXACoUGA90Y/view 出題者 : 108資訊學科能力競賽複賽-彰雲嘉 標籤 : 基本運算 難易度 : 2
解題想法 : 根據題意計算、調整即可 解題建議 : 建議 define function (題敘複雜)
//C++ language
//solution link(含註解): https://github.com/CBJ0519/CBJsProgramDiary.com/blob/main/%E8%B3%87%E8%A8%8A%E5%AD%B8%E7%A7%91%E8%83%BD%E5%8A%9B%E7%AB%B6%E8%B3%BD/108%E5%BD%B0%E9%9B%B2%E5%98%89/PC-%E9%A1%9E%E7%A5%9E%E7%B6%93%E7%B6%B2%E8%B7%AF%E6%84%9F%E7%9F%A5%E5%99%A8%E5%AD%B8%E7%BF%92%E8%A8%93%E7%B7%B4.cpp
#include<iostream>
#include<vector>
#include<tuple>
#include<iomanip>
using namespace std;
double make_net(double W1,double X1,double W2,double X2,double b){
return W1*X1+W2*X2+b;
}
int f(double net){
if(net>=0)return 1;
return -1;
}
double squ_loss_f(double Yd,int Y){
return 0.5*(Yd-Y)*(Yd-Y);
}
int main(){
vector<tuple<double,double,double>>Cases;
double W1,W2,b,alpha;
int p,k;
cin>>W1>>W2>>b>>alpha>>p>>k;
while(k--){
double X1,X2,Yd;
cin>>X1>>X2>>Yd;
Cases.push_back({X1,X2,Yd});
}
while(p--){
for(auto Case:Cases){
double X1=get<0>(Case);
double X2=get<1>(Case);
double Yd=get<2>(Case);
double net=make_net(W1,X1,W2,X2,b);
int Y=f(net);
double ep=squ_loss_f(Yd,Y);
W1=W1+(alpha*ep*X1);
W2=W2+(alpha*ep*X2);
}
}
cout<<fixed<<setprecision(2)<<W1<<" "<<W2<<"\n";
return 0;
}
## Python language
## solution link(含註解): https://github.com/CBJ0519/CBJsProgramDiary.com/blob/main/%E8%B3%87%E8%A8%8A%E5%AD%B8%E7%A7%91%E8%83%BD%E5%8A%9B%E7%AB%B6%E8%B3%BD/108%E5%BD%B0%E9%9B%B2%E5%98%89/PC-%E9%A1%9E%E7%A5%9E%E7%B6%93%E7%B6%B2%E8%B7%AF%E6%84%9F%E7%9F%A5%E5%99%A8%E5%AD%B8%E7%BF%92%E8%A8%93%E7%B7%B4.py
def make_net(W1,X1,W2,X2,b): return W1*X1+W2*X2+b
def f(net):
if net>=0: return 1
return -1
def squ_loss_f(Yd,Y): return 0.5*(Yd-Y)*(Yd-Y)
Cases=[]
_input=list(map(float,input().split()))
W1=_input.pop(0); W2=_input.pop(0); b=_input.pop(0)
alpha=_input.pop(0); p=int(_input.pop(0)); k=int(_input.pop(0))
for i in range(k):
X1=int(_input.pop(0)); X2=int(_input.pop(0)); Yd=int(_input.pop(0))
Cases.append([X1,X2,Yd])
for i in range(p):
for case in Cases:
X1,X2,Yd=case
net=make_net(W1,X1,W2,X2,b)
Y=f(net)
ep=squ_loss_f(Yd,Y)
W1+=alpha*ep*X1
W2+=alpha*ep*X2
print(f'{W1:.2f} {W2:.2f}')
發佈留言