📄 frm_auto_swatch.cs
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.IO;
using System.Diagnostics;
namespace bs
{
public partial class frm_Auto_Swatch : Form
{
public NodeArray myNodeArray=null;
public LineArray Lines=null;
public int sumofR = 0;//输入节点数量
public int sumofC = 0;//输出节点数量
private int indexRand = 0;
public ArrayList arryA;//要返回的结果
public frm_Auto_Swatch()
{
InitializeComponent();
}
private void frm_Auto_Swatch_Load(object sender, EventArgs e)
{
#region 窗体load代码
for (int i = 0; i < myNodeArray.Count; i++)
{
if (myNodeArray[i].indegree == 0)
{
sumofR++;
}
if (myNodeArray[i].outdegree == 0)
{
sumofC++;
}
}
listView1.Columns.Clear();
listView1.Columns.Add("行索引",60);
for (int i = 0; i < sumofR; i++)
{
listView1.Columns.Add("输入值" + (i + 1).ToString(), 60);
}
for (int i = 0; i < sumofC; i++)
{
listView1.Columns.Add("输出值" + (i + 1).ToString(), 60);
}
#endregion
}
#region 得到随机的bool值(已注释)
/*private bool GetBoolRand()
{
Random rand = new Random();
double Drand = rand.NextDouble();
if (Drand > 0.5d)
{
return true;
}
else
{
return false;
}
}*/
#endregion
private double GetDoubleRand()
{
#region 得到double类型的随机数0.0~1.0之间
this.indexRand++;
this.indexRand %= 8;
Random Rand = new Random();
return (double)Math.Pow(Math.Abs(Rand.NextDouble()),this.indexRand+1);
#endregion
}
private ArrayList GetShuRu()
{
#region 得到输入节点的随机值
ArrayList arrayL = new ArrayList();
for(int i=0;i<this.sumofR;i++)
{
double tem = this.GetDoubleRand();
arrayL.Add(tem);
}
return arrayL;
#endregion
}
private ArrayList GetShuChu(ArrayList ShuRu)
{
#region 得到相应输入的输出
if (ShuRu.Count != this.sumofR)
{
MessageBox.Show("输入值数量和网络输入节点数量不等!");
return null;
}
else
{
ArrayList arrNode = new ArrayList();
int i = 0;
foreach (BNode1 node in myNodeArray)
{
if (node.indegree == 0)
{
BNode_InOut bnode = new BNode_InOut();
bnode.DOut = (double)ShuRu[i];
bnode.node = node;
arrNode.Add(bnode);
}
i++;
}
for (int curtem = 0; curtem < myNodeArray.Count; curtem++)
{
if (myNodeArray[curtem].indegree != 0)
{
ArrayList arr = this.NParent(myNodeArray[curtem].name);
BNode_InOut bio = new BNode_InOut();
double sumMul = 1.0d;
if (myNodeArray[curtem].m_style == "Noisy_And")
{
for (int w = 0; w < arr.Count; w++)
{
double Dout=0.0d;
for(int curri=0;curri<arrNode.Count;curri++)
{
if(((BNode_InOut)arrNode[curri]).node.name==(string)arr[w])
{
Dout=((BNode_InOut)arrNode[curri]).DOut;
}
}
sumMul *= (1 - this.GetWij((string)arr[w], myNodeArray[curtem].name) * (1 - Dout));
}
}
else if (myNodeArray[curtem].m_style == "Noisy_Or")
{
for (int w = 0; w < arr.Count; w++)
{
double Dout = 0.0d;
for (int curri = 0; curri < arrNode.Count; curri++)
{
if (((BNode_InOut)arrNode[curri]).node.name == (string)arr[w])
{
Dout = ((BNode_InOut)arrNode[curri]).DOut;
}
}
sumMul *= ( 1-(this.GetWij((string)arr[w], myNodeArray[curtem].name) * Dout));
}
sumMul = 1 - sumMul;
}
bio.node = myNodeArray[curtem];
bio.DOut = sumMul;
arrNode.Add(bio);
}
}
return arrNode;
}
#endregion
}
public ArrayList NParent(string assessNode)
{
#region 得到节点父节点的集合
ArrayList parent = new ArrayList();
foreach (Line l in Lines)
{
if (l.dNode == assessNode)
{
parent.Add(l.sNode);
}
}
return parent;
#endregion
}
private double GetWij(string NodeNames, string NodeNameD)
{
#region 得到权值在lines数组
string wijtem="";
foreach (Line l in this.Lines)
{
if ((l.sNode == NodeNames) && (l.dNode == NodeNameD))
{
wijtem = l.wij;
}
}
return Convert.ToDouble(wijtem);
#endregion
}
private void button2_Click(object sender, EventArgs e)
{
#region 自动生成样本代码
int valueNum = (int)numericUpDown1.Value;
if (valueNum == 0)
{
MessageBox.Show("样本数量不能为0!");
return;
}
else
{
this.numericUpDown1.Enabled = false;
this.progressBar1.Maximum = valueNum;
this.progressBar1.Minimum = 0;
for (int i = 0; i < valueNum; i++)
{
this.progressBar1.Value=i+1;
ArrayList arrR = this.GetShuRu();
ArrayList aryC = this.GetShuChu(arrR);
ListViewItem item = new ListViewItem((i+1).ToString());
for (int j = 0; j < this.sumofR; j++)
{
item.SubItems.Add(((BNode_InOut)aryC[j]).DOut.ToString());
}
for (int Ci = 0; Ci < this.sumofC; Ci++)
{
item.SubItems.Add(((BNode_InOut)aryC[aryC.Count-this.sumofC+Ci]).DOut.ToString());
}
listView1.Items.Add(item);
}
this.numericUpDown1.Enabled = true;
}
#endregion
}
private void button4_Click(object sender, EventArgs e)
{
#region 保存文件代码
if (listView1.Items.Count == 0)
{
MessageBox.Show("样本数量为0!");
return;
}
else
{
SaveFileDialog sf = new SaveFileDialog();
sf.ValidateNames=true;
sf.AddExtension = true;
sf.DefaultExt = "txt";
sf.Filter = "文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*"
;
if (sf.ShowDialog() == DialogResult.OK)
{
StreamWriter sw = new StreamWriter(sf.FileName);
sw.WriteLine(this.sumofR.ToString());
sw.WriteLine(this.sumofC.ToString());
sw.WriteLine(this.listView1.Items.Count.ToString());
foreach (ListViewItem li in listView1.Items)
{
string tem="";
for (int i = 1; i < li.SubItems.Count; i++)
{
tem += li.SubItems[i].Text + " ";
}
sw.WriteLine(tem);
}
sw.Flush();
sw.Close();
if (MessageBox.Show("是否打开存储文件?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
Process.Start(sf.FileName);
}
}
}
#endregion
}
private void button3_Click(object sender, EventArgs e)
{
#region 返回样本值的代码
if (this.listView1.Items.Count == 0)
{
MessageBox.Show("没有样本值");
}
else
{
this.arryA = new ArrayList();
for (int i = 0; i < listView1.Items.Count; i++)
{
ArrayList arrayTem = new ArrayList();
for (int j = 1; j < listView1.Items[i].SubItems.Count; j++)
{
try
{
arrayTem.Add(listView1.Items[i].SubItems[j].Text);
}
catch (Exception er)
{
MessageBox.Show(er.Message);
}
}
this.arryA.Add(arrayTem);
}
this.DialogResult = DialogResult.OK;
}
#endregion
}
private void frm_Auto_Swatch_FormClosed(object sender, FormClosedEventArgs e)
{
#region 如何有样本返回OK,否则返回Cancel
if (this.listView1.Items.Count == 0)
{
this.DialogResult = DialogResult.Cancel;
}
else
{
this.DialogResult = DialogResult.OK;
}
#endregion
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -