Optimização dos algoritmos. - página 3

 
joo:

A largura dos sectores não pode corresponder aos valores da matriz, caso contrário o algoritmo não funcionará para todos os números.

O que importa é a distância a que os números estão separados. Quanto mais afastados estiverem todos os números do primeiro, menor é a probabilidade de caírem. Na essência adiamos numa linha recta barras proporcionais à distância entre os números, ajustadas por um factor de 0,01, de modo a que o último número a probabilidade de cair não fosse igual a 0 como o mais afastado do primeiro. Quanto mais elevado for o coeficiente, mais iguais são os sectores. O ficheiro excel está anexado, experimente com ele.

1. O cálculo das probabilidades teóricas é dado no Excel. O primeiro número é a probabilidade mais alta, o último número é a probabilidade mais baixa mas não é igual a 0.

2) As dimensões negativas dos sectores nunca acontecem para qualquer conjunto de números, desde que o conjunto seja classificado por ordem decrescente - o primeiro número é o maior (funcionará com o maior do conjunto mas com um número negativo).

Não compreendo, mas já gosto da sua abordagem à teoria da probabilidade, expressa numa frase chave: "É importante a distância a que os números se encontram entre eles. Quanto mais afastados estiverem todos os números do primeiro, menor é a probabilidade de caírem..." e tirar dois (check shot): "Está a sugerir que se escolha um elemento do conjunto ao acaso? - Não tem em conta as distâncias entre números de matriz, pelo que o seu caminho é inútil". Pergunta legítima: A lavagem do cérebro é um exercício obrigatório na lógica de escrita de programas de afiação? É melhor ficar um codificador diletante, é melhor para a minha saúde.

E se for bom com a teoria da probabilidade, a lógica da roleta - um gerador de números aleatórios no intervalo de 0 a 36 (se a roleta for convencional, europeia, sem o duplo zero ao estilo americano, etc...).

 
Wangelys:

Não percebo, mas já gosto da sua abordagem à teoria da probabilidade, expressa na frase chave: "A distância entre os números importa. Quanto mais longe todos os números forem do primeiro, menos provável é que caiam..." e tirar dois (check shot): "Propõe-se apenas seleccionar um elemento do conjunto ao acaso? - Não tem em conta as distâncias entre números de matriz, pelo que o seu caminho é inútil". Pergunta legítima: A lavagem cerebral é um exercício obrigatório na lógica de escrita de programas de afiação? É melhor ficar um codificador diletante, é melhor para a minha saúde.

E se for bom com a teoria da probabilidade, a lógica da roleta - um gerador de números aleatórios num intervalo de 0 a 36 (se a roleta europeia regular, sem o duplo zero ao estilo americano, etc. ...).

Na verdade, a roleta do casino não é mais do que uma metáfora, pela qual já caíram pelo menos três pessoas neste fio.

 
joo:

Na verdade, a roleta do casino não é mais do que uma metáfora pela qual já caíram pelo menos três pessoas neste fio.

- Sim, sim, já percebi! Linguagem de Esopo!

- Desculpe, de onde é isso?

 
Wangelys:

- Sim, sim, já percebi! Linguagem de Esopo!

- Desculpe, eu não percebi isso, de onde era?

Robert Sheckley?
 
joo:

A largura dos sectores não pode corresponder aos valores da matriz, caso contrário o algoritmo não funcionará para todos os números.

O que importa é a distância a que os números estão separados. Quanto mais afastados estiverem todos os números do primeiro, menor é a probabilidade de caírem. Na essência adiamos numa linha recta barras proporcionais à distância entre os números, ajustadas por um factor de 0,01, de modo a que o último número a probabilidade de cair não fosse igual a 0 como o mais afastado do primeiro. Quanto mais elevado for o coeficiente, mais iguais são os sectores. O ficheiro excel está anexado, experimente com ele.

1. O cálculo das probabilidades teóricas é dado no Excel. O primeiro número é a probabilidade mais alta, o último número é a probabilidade mais baixa mas não é igual a 0.

2) As dimensões negativas do sector nunca acontecem para qualquer conjunto de números, desde que o conjunto seja classificado por ordem decrescente - o primeiro número é o maior (também funcionará com o maior do conjunto, mas um número negativo).

Esta não é uma afirmação correcta IMHO.

имеем массив
 double a[10]={1,2,3,4,5,6,7,8,9,10};
какова вероятность выпадения каждого?
 55=1+2+3+4+5+6+7+8+9+10;
 double b[10]={1/55,2/55,3/55,4/55,5/55,6/55,7/55,8/55,9/55,10/55};
те вероятность выпадения [0] в 10 раз меньше чем [9].
теперь разметим массив где эти вероятности будут отображены
 double с[10]={1,3,6,10,15,21,28,36,45,55};
теперь при выпадении чисел от 1 до 55, если ранд55 <= c[x], то имеем нужный индекс.
для того чтоб работало и для отрицательных чисел нужно сдвинуть значения на 1-с[0].

теперь посмотрим изменяться ли вероятности при изменении чисел...
 double a[10]={2,4,6,8,10,12,14,16,18,20};
какова вероятность выпадения каждого?
 110=2+4+6+8+10+12+14+16+18+20;
 2/110==1/55
 double b[10]={1/55,2/55,3/55,4/55,5/55,6/55,7/55,8/55,9/55,10/55};
те вероятность выпадения [0] в 10 раз меньше чем [9], 
вероятность выпадения не изменилась, 
т.к. она измеряется относительно среднего рассчитанного по всему массиву.

 

Segundo, o cálculo da matriz de probabilidade com[] é necessário uma vez por época, pelo que devemos dividir a função em RoletteEpoh() e RoletteRand().

Embora Joo o tenha mencionado no início.

mas pode obter a velocidade em si só através da procura do valor descido em c[] array.

Pode utilizar o bíblio padrão, nomeadamente os métodos de pesquisa rápida.

E é melhor tirar os seus métodos retrabalhados do artigo Folhas de cálculo em MQL5

Se quiser fazer uma pesquisa rápida de matrizes ordenadas com valores não decrescentes, use o padrão com valores ascendentes (posso estar errado, já passou algum tempo desde que tombei no padrão).

 
joo:
Robert Shackley?
Não, um pouco mais simples - Privoz em Odessa, embora eu também adore Shackley (quase soletrado shekels). Mas a sua metáfora seguinte "apanhou" todos os participantes neste ramo:
joo:
Sugiro que discutamos aqui os problemas de construção da lógica do algoritmo óptimo
-porque o que se passa aqui dificilmente se enquadra na formulação do problema da "construção óptima da lógica do algoritmo" - é mais como a melhoria dos métodos e técnicas de codificação... ou estarei eu errado?
 
Wangelys:
Problemas de "construção óptima da lógica do algoritmo" - é mais como a melhoria dos métodos e técnicas de codificação... ou estarei eu errado?

Um fio de natureza geral:

"Se alguém duvida que o seu algoritmo tem uma lógica óptima em termos de velocidade (ou clareza), é bem-vindo".

E especificamente a minha tarefa era "...por favor, sugerir uma variante mais rápida...". Mais rápido! Não estou a perguntar se o meu algoritmo está certo ou errado, neste caso só preciso de mais rápido, ou seja, se alguém sugerir outra variante do algoritmo, deverá produzir resultados exactamente iguais aos meus e a nenhum outro. E, por alguma razão, cada um começou a pensar no seu próprio assunto.


OK, a minha tarefa de acelerar foi resolvida. :)

 
Wangelys:

- Sim, sim, já percebi! Linguagem de Esopo!

- Desculpe, eu não percebi isso, de onde era?

É de algoritmos genéticos.
Генетические алгоритмы - это просто!
Генетические алгоритмы - это просто!
  • 2010.05.25
  • Andrey Dik
  • www.mql5.com
В статье автор расскажет об эволюционных вычислениях с использованием генетического алгоритма собственной реализации. Будет показано на примерах функционирование алгоритма, даны практические рекомендации по его использованию.
 
Agora tenho um problema. Preciso de fazer uma classificação eficaz das matrizes com grandes "custos" de cópia de elementos (ou seja, elementos dos quais são volumosos, estruturas "pesadas", objectos de classe, cordas longas, etc.). O senso comum sugere que devemos deixá-los no lugar, mas ordená-los por algum tipo de ponteiros - índices de células da sua localização original. Aqui está uma citação daqui :https://www.mql5.com/ru/forum/6476#comment_178318
Если прямо тут перевести в подобие "техзадания", то нужна функция, на вход берущая массив и возвращающая 
второй массив (int), элементы которого являются индексами элементов входного массива, расположенными 
по убыванию (возрастанию).

В идеальном случае сделать перегрузки для всех стандартных типов + CObject (при обязательном требовании
к реализации функции Compare() у наследников CObject).  Хотелось бы и для структур, но похоже на стороне
разработчика никак не решаемо - виртуальных функций у структур нет (и не надо!), т.е. юзерскую функцию
Compare() не пришить, а "стандартное" отношение порядка для структур, естественно, не определено.  
Vamos deixar os conceituados desenvolvedores de terminais com as suas numerosas tarefas actuais por agora, e implementá-lo no mql5.