public static double SearchMeanPercent(PercentDelegate SearchPercent, SearchParameters parameters, double averChange, Solver solver, Random rand) { double average = 0; int runNumber = 0; int accuracyAmount = 0; int runFinish; do { double diff = runNumber != 0 ? average / runNumber : 0; average += SearchPercent(parameters, solver, rand); parameters.Clear(); runNumber++; diff = Math.Abs(average / runNumber - diff); accuracyAmount = (diff < averChange) ? accuracyAmount + 1 : 0; } while (accuracyAmount < 10); runFinish = runNumber * 10; var iterations = runFinish - runNumber; var quantity = Environment.ProcessorCount; var step = (int)Math.Ceiling((double)iterations / quantity); runNumber += step * quantity; int threadsSum = 0; Parallel.For(0, quantity, i => { int sumLocal = 0; var solverLocal = new Solver(); var randLocal = new Random(); var paramsLocal = parameters.Copy(); for (var j = 0; j < step; j++) { sumLocal += SearchPercent(paramsLocal, solverLocal, randLocal); paramsLocal.Clear(); } Interlocked.Add(ref threadsSum, sumLocal); } ); average += threadsSum; average /= runNumber; return(average); }
public SearchForm() { InitializeComponent(); searchParameters = new SearchParameters(); searchParameters.Clear(); }
private void ValidateFields() { bool isValid = true; bool hasData = false; if (isValidating) { return; } isValidating = true; // Packet directions searchParameters.SearchIncoming = (rbAny.Checked || rbIncoming.Checked); searchParameters.SearchOutgoing = (rbAny.Checked || rbOutgoing.Checked); // Make sure no search options are on before validating searchParameters.SearchByPacketID = false; searchParameters.SearchBySync = false; searchParameters.SearchByByte = false; searchParameters.SearchByUInt16 = false; searchParameters.SearchByUInt32 = false; searchParameters.SearchByParsedData = false; searchParameters.SearchParsedFieldName = string.Empty; searchParameters.SearchParsedFieldValue = string.Empty; // PacketID if (DataLookups.TryFieldParse(ePacketID.Text, out int nPacketID)) { if ((nPacketID > 0) && (nPacketID < 0x1FF)) { hasData = true; searchParameters.SearchByPacketID = true; searchParameters.SearchPacketID = (UInt16)nPacketID; ePacketID.ForeColor = Color.Blue; } else { ePacketID.ForeColor = Color.Red; } } else { ePacketID.ForeColor = Color.DarkGray; } // Sync if (DataLookups.TryFieldParse(eSync.Text, out int nSync)) { if ((nSync > 0) && (nSync < 0xFFFF)) { hasData = true; searchParameters.SearchBySync = true; searchParameters.SearchSync = (UInt16)nSync; eSync.ForeColor = Color.Blue; } else { eSync.ForeColor = Color.Red; } } else { eSync.ForeColor = Color.DarkGray; } // Value if (DataLookups.TryFieldParseUInt64(eValue.Text, out UInt64 nValue)) { // Check the correct type if ((nValue > 0xFFFF) && (rbByte.Checked || rbUInt16.Checked)) { rbUInt32.Checked = true; } else if ((nValue > 0xFF) && (rbByte.Checked)) { rbUInt16.Checked = true; } if ((nValue >= 0) && (nValue <= 0xFF) && (rbByte.Checked)) { hasData = true; searchParameters.SearchByByte = true; searchParameters.SearchByUInt16 = false; searchParameters.SearchByUInt32 = false; searchParameters.SearchByte = (byte)nValue; eValue.ForeColor = Color.Navy; } else if ((nValue >= 0) && (nValue <= 0xFFFF) && (rbUInt16.Checked)) { hasData = true; searchParameters.SearchByByte = false; searchParameters.SearchByUInt16 = true; searchParameters.SearchByUInt32 = false; searchParameters.SearchUInt16 = (UInt16)nValue; eValue.ForeColor = Color.RoyalBlue; } else if ((nValue >= 0) && (nValue <= 0xFFFFFFFF) && (rbUInt32.Checked)) { hasData = true; searchParameters.SearchByByte = false; searchParameters.SearchByUInt16 = false; searchParameters.SearchByUInt32 = true; searchParameters.SearchUInt32 = (UInt32)nValue; eValue.ForeColor = Color.Blue; } else { rbByte.Checked = true; eValue.ForeColor = Color.Red; } } else { rbByte.Checked = true; eValue.ForeColor = Color.DarkGray; } if (eFieldValue.Text != string.Empty) { hasData = true; searchParameters.SearchByParsedData = true; searchParameters.SearchParsedFieldName = cbFieldNames.Text.ToLower(); searchParameters.SearchParsedFieldValue = eFieldValue.Text.ToLower(); } if ((!isValid) || (!hasData)) { searchParameters.Clear(); } btnFindNext.Enabled = isValid && hasData; btnAsNewTab.Enabled = isValid && hasData; isValidating = false; }