Re: Ещё про ёжиков.
От: UgN  
Дата: 08.04.03 10:37
Оценка:
Здравствуйте, Pushkin, Вы писали:


P>3) Эта кажется существенно сложнее. На самом деле решение удивительно простое.

P>Сидит ёжик. Мимо ползёт ежиха. В момент наибольшего сближения ёжик стартует в сторону ежихи и далее всё время держит курс строго на неё. Скорости одинаковые. Во сколько раз ёж сократит исходное расстояние?

1/2 !!!
Re[4]: Ещё про ёжиков.
От: Кодт Россия  
Дата: 08.04.03 10:39
Оценка:
Здравствуйте, Pushkin, Вы писали:

P>Ясно, что есть некий коэффициент дикости

P>При к=0 ракета ведёт себя по собачьи.
P>При к=1 — как самый дикий волк. А именно летит строго по прямой в место предполагаемой встречи с жертвой.

P>Если жертва — пассажирский самолёт (привет соседям ), то выгоднее дикий вариант, а если она всё время увёртывается, то нет смысла лететь черти-куда, жертва всё равно туда не полетит, поэтому выгоден собачий. В реальных задачах наверное используется некая смесь 0<k<1, т.е упреждают на некую долю.


P>Можно поставить задачу о быстрейшем поражении цели, если её дальнейшее движение неизвестно, а предыдущее дало некую статистику. Мне кажется (из размерности), что оптимальный коэффициент должен меняться в процессе полёта. Что-нибудь типа:


P>k= 1/(1+средняя_кривизна_траектории_жертвы/расстояние_до_жертвы)


P>В частности само поражение всегда происходит по-собачьи


Это неправда.
Нет никакого коэффициента дикости. Есть следящие системы первого и второго порядков.
Собака — следит только за положением цели, а волк — еще и за скоростью.

Если (в координатной системе преследователя; сам преследователь имеет скорость <1;0;0>) жертва имеет положение R и скорость V (векторы), то

Собака решает уравнение (по новому значению своей скорости, W, |W|=1)
W*t = R; |W|=1
W = R/t
t = |R|
W = R/|R|

Волк решает уравнение
W*t = R + V*t; |W|=1
W = R/t + V
|R+Vt|=t
R^2 + 2t(R.V) + t^2*(V^2 — 1) = 0
в общем, лень выводить формулу...

Короче говоря, волк бежит несколько дальше, к "точке встречи". Хотя положение точки встречи все время меняется (если жертва маневрирует), но направление на точку встречи изменяется плавнее, чем направление на жертву.
Перекуём баги на фичи!
Re[2]: Ещё про ёжиков.
От: Pushkin Россия www.linkbit.com
Дата: 08.04.03 10:40
Оценка:
Здравствуйте, UgN, Вы писали:

UgN>1/2 !!!


Ну допустим, да
Re[3]: Ещё про ёжиков.
От: Pushkin Россия www.linkbit.com
Дата: 08.04.03 10:41
Оценка:
Здравствуйте, Pushkin, Вы писали:


UgN>>1/2 !!!


P>Ну допустим, да


Или это были три факториала?
Re[5]: Ещё про ёжиков.
От: Pushkin Россия www.linkbit.com
Дата: 08.04.03 10:52
Оценка:
Здравствуйте, Кодт, Вы писали:

P>>Можно поставить задачу о быстрейшем поражении цели, если её дальнейшее движение неизвестно, а предыдущее дало некую статистику.


К>Это неправда.

К>Нет никакого коэффициента дикости. Есть следящие системы первого и второго порядков.
К>Собака — следит только за положением цели, а волк — еще и за скоростью.

Ещё раз пытаюсь сформулировать задачу.

Есть собака, она бегает по-собачьи.
Есть волк, он соответственно по-волчьи.
Есть куча слепых зайцев.
Выпускаем первого зайца, он начинает бегать как попало.
Бегает долго, мы все наблюдаем.
В произвольный момент спускаем с поводков волка и собаку.
Кто раньше схватит?
Делаем так 100 раз, смотрим статистику.
Делаем выводы о предпочтительности стратегии.
(Мне кажется, это зависит от манеры бегать зайца.
Для оленя или велосипедиста может оказаться иначе.)
Думаем, какую программу заложить в робота, 
чтобы он делал их обоих в большинстве случаев.
Re[4]: Ещё про ёжиков.
От: mogadanez Чехия  
Дата: 08.04.03 10:59
Оценка:
P>>Ну допустим, да

P>Или это были три факториала?


факториал 1/2 ????? очень интересно!

не распишите как это?

вот вам в помощь определение из большой советской энциклопедии

Факториал (англ. factorial, от factor-comножитель) (математический), произведение натуральных чисел от единицы до какого-либо данного натурального числа n, то есть 1?2?...?n', обозначается n!. При больших n приближённое выражение Ф. даётся Стирлинга формулой. Ф. равен числу перестановок из n элементов.

... << RSDN@Home 1.0 beta 6a >>
Re[5]: Ещё про ёжиков.
От: Pushkin Россия www.linkbit.com
Дата: 08.04.03 11:06
Оценка: 6 (1)
Здравствуйте, mogadanez, Вы писали:

M>факториал 1/2 ????? очень интересно!

M>не распишите как это?
M>вот вам в помощь определение из большой советской энциклопедии
M>Факториал (англ. factorial, от factor-comножитель) (математический), произведение натуральных чисел от единицы до какого-либо данного натурального числа n

Это для детей
Настоящие крутые перцы определяют факториал через гамма-функцию

n!=integral_0_inf{x^n exp(-x) dx}


Да что там крутые перцы — даже мастдайный калькулятор знает, что

0.5! = 0.886 = sqrt(pi)/2


Re[5]: Ещё про ёжиков.
От: mrhru Россия  
Дата: 08.04.03 11:06
Оценка:
Здравствуйте, mogadanez, Вы писали:

P>>>Ну допустим, да


P>>Или это были три факториала?


M>факториал 1/2 ????? очень интересно!


M>не распишите как это?


M>вот вам в помощь определение из большой советской энциклопедии


M>

M>Факториал (англ. factorial, от factor-comножитель) (математический), произведение натуральных чисел от единицы до какого-либо данного натурального числа n, то есть 1?2?...?n', обозначается n!. При больших n приближённое выражение Ф. даётся Стирлинга формулой. Ф. равен числу перестановок из n элементов.


Есть ещё гамма-функция Г(х + 1) = х! для целых х.
Унылая, пора...
Re: Решение для 3 и 4
От: UgN  
Дата: 08.04.03 11:10
Оценка: 11 (1)
Здравствуйте, Pushkin

Надоело мне мозгами скрипеть, пусть комп думает — он железный.


Код не оптимизирован и вообще ни на что не претендует.
Но поиграться можно.



template < class T >
class Point
{
public:
    Point(){};
    Point( T x, T y ) : m_x( x ), m_y( y ) {};
    T distance( const Point < T > & p ) const
    {
        T x = p.m_x - m_x;
        T y = p.m_y - m_y;
        return sqrt( x*x + y*y );
    };
    T GetX() const { return m_x; };
    T GetY() const { return m_y; };
    void SetX( T x ){ m_x = x; };
    void SetY( T y ){ m_y = y; };
protected:
    T    m_x;
    T    m_y;
};


template < class T >
class Mobile
{
public:
    Mobile( const Point< T > & coord, const Point< T > & direction, T velocity  ) : 
                                    m_coord( coord ), 
                                    m_direction( direction ),
                                    m_velocity( velocity )                    
    {
    };
    
    void Move( T  tick )
    {
        m_coord.SetX( m_coord.GetX() + m_direction.GetX() * m_velocity * tick );
        m_coord.SetY( m_coord.GetY() + m_direction.GetY() * m_velocity * tick );
    };

    const Point < T > & GetCoord()        const {    return m_coord; };
    const Point < T > & GetDirection()    const { return m_direction;};
    void SetCoord( const Point < T > & p )        { m_coord = p; };
    void SetDirection( const Point < T > & p )    { m_direction = p; };


protected:
    Point < T > m_direction;
    Point < T > m_coord;
    T            m_velocity;
};

template < class T >

class Target : public Mobile < T > 
{
public:
    Target( T x, T y, T v ) : Mobile < T >( Point< T >( x, y ), Point< T >( 1, 0 ), v ) 
    {
    };
};

template < class T >
class Missile : public Mobile < T > 
{
public:
    Missile( T x, T y, T v ) : Mobile < T >( Point< T >( x, y ), Point< T >( 0, 1 ), v ){};
    void Aim( const Point < T > & p )
    {
        T x = p.GetX() - m_coord.GetX();
        T y = p.GetY() - m_coord.GetY();

        if( y != 0 )
        {
            T k = x / y;
            y = sqrt( 1 / ( k*k + 1 ) );
            x = sqrt( 1 - 1 / ( k*k + 1 ) );
        }
        else
        {
            x = 0;
        };
        
        m_direction.SetX( x );
        m_direction.SetY( y );
    };
};



int main(int argc, char* argv[])
{
    double Dist = 100;

    Target < double > T( 0, Dist, 10 ); // x, y, скорость
    Missile< double > M( 0, 0,    10 ); // x, y, скорость
    
    double Threshold = 0.001;    // порог окончания расчетов
    double Diff = 0;            // разность расстояний в последоват. итерациях
    double TimeTick = 0.1;        // квант времени
    double TotalTime = 0;        // Считает сумму квантов
    do
    {
        M.Aim( T.GetCoord() );  // Целимся на Target
        M.Move( TimeTick );        // Двигаем ракету
        T.Move( TimeTick );        // Двигаем цель
        TotalTime += TimeTick;  // Считаем время
        double CurrDist = T.GetCoord().distance( M.GetCoord() ); // Расстояние
        Diff = Dist - CurrDist;
        Dist = CurrDist;
        cout << "T: " << T.GetCoord().GetX() << " : "  << T.GetCoord().GetY() << endl;
        cout << "M: " << M.GetCoord().GetX() << " : "  << M.GetCoord().GetY() << endl;
        cout << "Dist:" << Dist << "    Diff:" << Diff << endl;
        // Это формат csv - потом в Excel построим диаграмму
        //cout << T.GetCoord().GetX() << ","  << T.GetCoord().GetY() << ",";
        //cout << M.GetCoord().GetX() << ","  << M.GetCoord().GetY() << "," << endl;
    } while( Diff > Threshold );
    cout << "Total time: " << TotalTime << endl;
    return 0;
}
Re[6]: Ещё про ёжиков.
От: mrhru Россия  
Дата: 08.04.03 11:11
Оценка:
Здравствуйте, Pushkin, Вы писали:

M>>факториал 1/2 ????? очень интересно!

M>>не распишите как это?

P>Это для детей

P>Настоящие крутые перцы определяют факториал через гамма-функцию
...
P>Да что там крутые перцы — даже мастдайный калькулятор знает, что

Pushkin! Что за слог?!
Унылая, пора...
Re[5]: Ещё про ёжиков.
От: WFrag США  
Дата: 08.04.03 11:12
Оценка:
Здравствуйте, mogadanez, Вы писали:

P>>>Ну допустим, да


P>>Или это были три факториала?


M>факториал 1/2 ????? очень интересно!


M>не распишите как это?


M>вот вам в помощь определение из большой советской энциклопедии


M>

M>Факториал (англ. factorial, от factor-comножитель) (математический), произведение натуральных чисел от единицы до какого-либо данного натурального числа n, то есть 1?2?...?n', обозначается n!. При больших n приближённое выражение Ф. даётся Стирлинга формулой. Ф. равен числу перестановок из n элементов.


Гамма функция, это обобщение факториала.

Г(y)= интеграл(0,беск)[ t^(y-1) * e^(-t) ]dt

Свойство:
Г(n+1) = n!, N э n;
... << RSDN@Home 1.0 beta 6a >>
Re[2]: Решение для 3 и 4
От: UgN  
Дата: 08.04.03 11:13
Оценка:
UgN>Надоело мне мозгами скрипеть, пусть комп думает — он железный.

И вообще, это мой ответ тем, кто наезжает на форум, считая его "не про программирование"

Re[7]: Ещё про ёжиков.
От: Pushkin Россия www.linkbit.com
Дата: 08.04.03 11:24
Оценка: 7 (2) :))
Здравствуйте, mrhru, Вы писали:

P>Настоящие крутые перцы определяют факториал через гамма-функцию

M>Pushkin! Что за слог?!

Не каждый отрок с юных лет считать умеет интегралы
Иной предпочитает бАлы, попасть мечтая в высший свет.


Re: Элементарное решение пункта 3! (воскл.знак, не факториал
От: Apapa Россия  
Дата: 08.04.03 11:26
Оценка: 122 (7)
Привет, Pushkin!

Пока я думал о четвертом пункте, смотрю, а ответ на третий уже есть. Вот я и решил сразу опубликовать его с элементарным (не программистским) решением, чтобы кто-то не опередил хоть в этом! Это мой ответ тем, кто все считает программированием!

P>3) Эта кажется существенно сложнее. На самом деле решение удивительно простое.

P>Сидит ёжик. Мимо ползёт ежиха. В момент наибольшего сближения ёжик стартует в сторону ежихи и далее всё время держит курс строго на неё. Скорости одинаковые. Во сколько раз ёж сократит исходное расстояние?

Будем оптимистами! Ежа поместим в центр вселенной (0; 0). Ежиху в (1; 0). Ее, с одной стороны, тянет на ежа, с другой, — куда-то вверх, ввысь, к принцам там всяким. Есть два вектора единичной скорости (вверх и к ежу). Результирующий вектор направлен по биссектрисе образованого угла. Следовательно, он имеет одинаковую проекцию на стороны этого угла. Таким образом, изменение расстояния от ежа равно минус изменению y-координаты ежихи. Т.е. производная r по y равна -1. r = 1 — y (из начальных условий). В конце r = y. Т.е. в конце r = 0.5.


Здесь могла бы быть Ваша реклама!
Re[2]: Эмулятор ежей
От: Димчанский Литва http://dimchansky.github.io/
Дата: 08.04.03 11:26
Оценка: 78 (7)
Здравствуйте, Apapa, Вы писали:
A>В силу симметрии ежики всегда в углах квадрата и ползут со скоростью 1 к соседу, ползущему перпендикулярно. Т.о. через 1 они встретятся. Кто не верит, тот может проверить, что сторона квадрата уменьшается с постоянной скоростью -1.

Согласен с рассуждениями.
Для тех кто не верит, может проверить с помощью кода на MatLab:
clear;

a2 = 1; % сторона квадрата
a = a2/2;
ezhkoord=[a a; a -1*a; -1*a -1*a; -1*a a]; % координаты ежей, в порядке, как они бегут друг за другом
ezhspeed=[1; 1; 1; 1]; % скорость ежей

T=10; % времня наблюдения
dt=0.00001; % дискрет по времени

figure(1);
plot(ezhkoord(:,1),ezhkoord(:,2),'.','markersize',30);
grid on;
hold on;

t=0;
i=0;
Tolerance = a2;
while (t<T)&&(Tolerance>0.0001),
    i = i+1;
    t = i*dt;
    speedvector=circshift(ezhkoord,-1)-ezhkoord;
    norma = sqrt((speedvector(:,1)).*(speedvector(:,1))+(speedvector(:,2)).*(speedvector(:,2)));
    Tolerance = max(norma);
    norma = 1./norma;
    speedvector(:,1)=speedvector(:,1).*norma.*ezhspeed;
    speedvector(:,2)=speedvector(:,2).*norma.*ezhspeed;
    ezhkoord=ezhkoord+dt*speedvector;
    plot(ezhkoord(:,1),ezhkoord(:,2),'.','markersize',1);
end
fprintf(['Ежики встретились. t = %0.16f'],t);

А ниже можно посмотреть на траектории движения ежей.

Ежики встретились. t = 0.9999600000000001

Численные методы есть численные методы.
Несложно проследить движение ежей на разных скоростях при разном количестве ежей и т.д. Код правится легко.
Надеюсь, грубых ошибок не допустил.
Re[3]: Решение для 3 и 4
От: Pushkin Россия www.linkbit.com
Дата: 08.04.03 11:26
Оценка:
Здравствуйте, UgN, Вы писали:

UgN>Надоело мне мозгами скрипеть, пусть комп думает — он железный.


Маньяк Даёт оно одну вторую-то?
Re[6]: Ещё про ёжиков.
От: Дмитро  
Дата: 08.04.03 11:29
Оценка:
Здравствуйте, Pushkin, Вы писали:

P>Здравствуйте, Кодт, Вы писали:


P>>>Можно поставить задачу о быстрейшем поражении цели, если её дальнейшее движение неизвестно, а предыдущее дало некую статистику.


К>>Это неправда.

К>>Нет никакого коэффициента дикости. Есть следящие системы первого и второго порядков.
К>>Собака — следит только за положением цели, а волк — еще и за скоростью.

P>Ещё раз пытаюсь сформулировать задачу.


P>
P>Есть собака, она бегает по-собачьи.
P>Есть волк, он соответственно по-волчьи.
P>Есть куча слепых зайцев.
P>Выпускаем первого зайца, он начинает бегать как попало.
P>Бегает долго, мы все наблюдаем.
P>В произвольный момент спускаем с поводков волка и собаку.
P>Кто раньше схватит?
P>Делаем так 100 раз, смотрим статистику.
P>Делаем выводы о предпочтительности стратегии.
P>(Мне кажется, это зависит от манеры бегать зайца.
P>Для оленя или велосипедиста может оказаться иначе.)
P>Думаем, какую программу заложить в робота, 
P>чтобы он делал их обоих в большинстве случаев.
P>


Сделать следящую систему третьего порядка, которая будет учитывать и изменение скорости (ускорение). Эта стратегия будет выигрышной (по сравнению с собачей и волчей) в том случае, если положение зайца описывается кривой второго порядка. (что, кстати, не мешало бы доказать.) Если кривая более высокого порядка, что надо учитывать и изменение ускорения и изменение изменения ускорения и т.д.

Вообще-то волчья стратегия в большинстве случаев более оптимальна, чем собачья, поскольку основывается на предположении, что заяц бежит прямолинейно с постоянной скоростью (в отличии от собачьего предположения, что заяц сидит на месте и не двигается). Хотя, конечно, можно придумать такой заячий маршрут, при котором собака догонит зайца быстрее, чем волк, но мне также кажется, что с таким же успехом можно придумать и такой, при котором, стратегия "сидеть на месте и ждать, когда заяц прибежит сам", будет более оптимальнее, чем волчья и собачья вместе взятые.

--
Дмитрий
--
Дмитрий
Re[4]: Решение для 3 и 4
От: UgN  
Дата: 08.04.03 11:32
Оценка:
Здравствуйте, Pushkin, Вы писали:

UgN>Надоело мне мозгами скрипеть, пусть комп думает — он железный.


P>Маньяк Даёт оно одну вторую-то?


А ты думаешь, я ее откуда взял???
Re[7]: Ещё про ёжиков.
От: UgN  
Дата: 08.04.03 11:34
Оценка: :))
Здравствуйте, Дмитро, Вы писали:

Д>Вообще-то волчья стратегия в большинстве случаев более оптимальна, чем собачья, поскольку основывается на предположении, что заяц бежит прямолинейно с постоянной скоростью (в отличии от собачьего предположения, что заяц сидит на месте и не двигается). Хотя, конечно, можно придумать такой заячий маршрут, при котором собака догонит зайца быстрее, чем волк, но мне также кажется, что с таким же успехом можно придумать и такой, при котором, стратегия "сидеть на месте и ждать, когда заяц прибежит сам", будет более оптимальнее, чем волчья и собачья вместе взятые.


Это уже будет китайская стратегия: сидеть на берегу реки и ждать, пока труп твоего врага проплывет мимо.
Re[3]: Эмулятор ежей
От: Apapa Россия  
Дата: 08.04.03 11:35
Оценка:
Привет, Димчанский!

Д>А ниже можно посмотреть на траектории движения ежей.

Д>

Ежик выбежал вертикально вверх.
Под каким углом он встретится с другими?
Т.е. к чему стремится угол поворота его носика при приближении к месту встречи?



Здесь могла бы быть Ваша реклама!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.